Re: duplicated modulo

Bastian Bloessl <[email protected]> Fri, 01 Apr 2011 12:28:09 +0200
Newsgroups org.kernel.vger.linux-c-programming
Message-ID <[email protected]>
Am 01.04.2011 12:19, schrieb Nicolas Kaiser:
> * "Michal Nazarewicz"<[email protected]>:
>> On Fri, 01 Apr 2011 11:41:13 +0200, Nicolas Kaiser wrote:
>>> I'm curious: a duplicated modulo operation can't possibly make
>>> any difference, can it?
>>>
>>> diff -u -p ./arch/powerpc/platforms/powermac/nvram.c
>>> /tmp/nothing/arch/powerpc/platforms/powermac/nvram.c
>>> --- ./arch/powerpc/platforms/powermac/nvram.c	2011-03-31
>>> 09:52:41.674292401 +0200
>>> +++ /tmp/nothing/arch/powerpc/platforms/powermac/nvram.c
>>> @@ -246,7 +246,6 @@ static u32 core99_calc_adler(u8 *buffer)
>>>   	high = 0;
>>>   	for (cnt=0; cnt<(NVRAM_SIZE-CORE99_ADLER_START); cnt++) {
>>>   		if ((cnt % 5000) == 0) {
>>> -			high  %= 65521UL;
>>>   			high %= 65521UL;
>>>   		}
>>>   		low += buffer[cnt];
>>
>> It's not just a module.  It's also an assignment.
>
> Sure. But I fail to see where between
>
> a %= b;
> a %= b;
>
> and
>
> a = (a % b) % b;
>
> and
>
> a %= b;
>
> would be a difference?
Perhaps an issue with signed / unsigned, or long vs. int?