On Mon, Jul 15, 2002 at 10:17:51PM -0700, John Porter wrote:
>
> Sean O'Rourke wrote:
> > ... all it buys you is a few bits of precision when your ints
> > and floats are both 64-bit, and slower comparisons all the time.
> > IMHO it's a wash, so I did it this way.
>
> I would point out that integers have infinite precision.
> More than a few bits' difference, I'd say.
>
> But you're right. As long as the conversion from int to float
> is done just before the comparison -- i.e. no intervening
> floating-point ops on the numbers -- then the result of
> comparison should always be right, no precision issue.
> (I'm just talking about in the int-vs-int case.)
> So, never mind. :-)
I'm confused. For some values of 64 bit integers, given 64 bit doubles,
the comparison is not correct when both are converted to doubles:
perl5.6.1-64 -le '$a = ~0; $b = $a & ~1; printf "%x <=> %x\n", $a, $b; print $a <=>
$b; {use integer; print $a <=> $b}'
ffffffffffffffff <=> fffffffffffffffe
0
1
5.8.0 does the full fun and games of integer or floating point comparison:
perl5.8.0-64 -le '$a = ~0; $b = $a & ~1; printf "%x <=> %x\n", $a, $b; print $a <=>
$b; {use integer; print $a <=> $b}'
ffffffffffffffff <=> fffffffffffffffe
1
1
IIRC the speed difference was hard to benchmark. However, the ability to
deal with large file offsets, windows device numbers and other 64 bit
quantities correctly was seen as useful.
I presume multimethod dispatch will render this discussion obsolete.
Nicholas Clark