Incorrect comparisons with NaNs
Original Reporter info from Mantis: Adriaan van Os
-
Reporter name: Adriaan van Os
Original Reporter info from Mantis: Adriaan van Os
- Reporter name: Adriaan van Os
Description:
Comparisons of floating point values involving NaNs do not conform to IEEE-754 &LtPos;http://en.wikipedia.org/wiki/IEEE-754>. For an explanation, see e.g. &LtPos;http://developer.apple.com/documentation/mac/PPCNumerics/PPCNumerics-37.html>
program testnan;
uses math;
const
kNan = Sqrt(-1);
kX = 5.8E-7;
var
vNan, vX: real;
begin
SetExceptionMask( [exInvalidOp, exDenormalized, exZeroDivide, exOverflow, exUnderflow, exPrecision]);
writeln;
writeln( 'constants');
writeln( 'Nan = ' , kNan:4);
writeln( 'x = ' , kX);
if kNan = kX then writeln( 'kNan = kX');
if kNan < kX then writeln( 'kNan < kX');
if kX < kNan then writeln( 'kX < kNan');
if kNan > kX then writeln( 'kNan > kX');
if kX > kNan then writeln( 'kX > kNan');
if kX <> kNan then writeln( 'kX <> kNan');
writeln;
vNan:= kNan;
vX:= kX;
writeln( 'variables:');
writeln( 'Nan = ' , kNan:4);
writeln( 'x = ' , vX);
if vNan = vX then writeln( 'vNan = vX');
if vNan < vX then writeln( 'vNan < vX');
if vX < vNan then writeln( 'vX < vNan');
if vNan > vX then writeln( 'vNan > vX');
if vX > vNan then writeln( 'vX > vNan');
if vX <> vNan then writeln( 'vX <> vNan');
end.
[P17:~/pcbugs] adriaan% fpc testnan.p
Free Pascal Compiler version 2.3.1 [2007/07/26] for i386
Copyright (c) 1993-2007 by Florian Klaempfl
Target OS: Darwin for i386
Compiling testnan.p
testnan.p(16,20) Warning: unreachable code
testnan.p(17,22) Warning: unreachable code
testnan.p(18,21) Warning: unreachable code
Assembling testnan
Linking testnan
31 lines compiled, 0.4 sec
3 warning(s) issued
[P17:~/fpcbugs] adriaan% ./testnan
constants
Nan = Nan
x = 5.8000000000000000E-0007
kNan = kX
kNan < kX
kX < kNan
variables:
Nan = Nan
x = 5.800000000000000E-007
vNan = vX
vNan < vX
vX < vNan
According to IEE-754, only kX <> kNan and vX <> vNan should evaluate to True.
Additional information:
[P17:~/fpcbugs] adriaan% fpc -i
Free Pascal Compiler version 2.3.1
Compiler Date : 2007/07/26
Compiler CPU Target: i386
...
Mantis conversion info:
- Mantis ID: 9362
- Version: 2.3.1