[fpc-devel] -1 mod 3
m2
m2 at ellipsa.net
Wed Nov 5 23:18:03 CET 2008
Schatzl Thomas a écrit :
> Hello,
>
>> Datum: Wed, 05 Nov 2008 18:04:01 +0100
>> Von: "Vinzent Höfler" <JeLlyFish.software at gmx.net>
>>> Unless they make use of Ada.
>> Which just has both, that's all. ;)
>>
>> As an alternative one could read some other language reference manuals
>> and notice that - surprisingly - at least two of the more common "real
>> world languages" don't even have a "modulo" operation:
>>
>> ISO/IEC9899:1999: (C99)
>
> [...]
>
>> Java:
>
> [...]
>
>> So, IMO somebody at Borland got it wrong, just because someone at Intel
>> did it that way - and this has definitely and absolutely nothing to do
>> with a "computer science implementation".
>>
>>
>> SCNR,
>
> Just because it's called "remainder" in other languages (and if you had actually read the specs ;), the result in these languages is still the same as for the FPC "mod" operator.
>
> E.g. both read, having the exact same wording in both specs, "...produces a result value such that (a/b)*b+(a%b) is equal to a."
>
> I.e. for a=-1 and b=3 the result is -1 following from a%b = a - (a/b)*b for both C99 and Java.
Which could solve the problem assuming A/B has only one solution. But
this is untrue. With real operands, i.e., not integer ones, there is one
solution (when B <> 0, of course). But with integer operands, if A is
not a multiple of B, there are two possible quotients. And none is
particular, both agree with the math definition :
A = B*q + r with |r| < |B|
For instance, for 13/7, the 2 possible quotients are 1 and 2 because
13 = 7 * 1 + 6
13 = 7 * 2 - 1
Now, that FPC returns -1 for -1 mod 3 is not very important. If
one needs a Ada-like behaviour, the code is easy to write.
mm
----
http://www.ellipsa.net/
More information about the fpc-devel
mailing list