I’ve been updating my old programs to use the MATH unit in freepascal and while testing things I came across a runtime error 217 Invalid floating point operation. Here is my test program
Uses math; var variable1:double; variable2:double; Begin variable1:= Infinity; variable2:= -1*Infinity; Writeln(variable1,' ',Variable2,' ',Variable1+Variable2); End. My output is: Running "i:\programming\test\testmath.exe " An unhandled exception occurred at $004015F6: EInvalidOp: Invalid floating point operation $004015F6 main, line 8 of i:/programming/test/testmath.pas +Inf -Inf According to the link here: https://en.wikipedia.org/wiki/NaN NaN should be produced: The additions (+∞) + (−∞), (−∞) + (+∞) and equivalent subtractions (+∞) − (+∞) and (−∞) − (−∞). I can do things like +infinity*2 and +infinity-3 and even sqr(infinity) and power(infinity,10) the results are still +Inf which is expected… but I can’t do anything involving subtracting infinity from infinity. Here is another test program that illustrates this more clearly: Uses math; var variable1:double; variable2:double; Begin variable1:= 1/0; variable2:= -1/0; Writeln(' V1',variable1); Writeln(' V2',variable2); Writeln(' SQRT(-1)',Sqrt(-1)); Writeln(' V1*V1',variable1*variable1); Writeln(' V1*V2',variable1*variable2); Writeln(' V1+3',variable1+3); Writeln(' V1+V1',variable1+variable1); Writeln(' V1-3',variable1-3); Writeln(' Sqr(V1)',Sqr(Variable1)); Writeln(' Sqr(V2)',Sqr(Variable2)); Writeln(' Sqrt(-1)',Sqrt(-1)); Writeln(' Sqrt(V1)',Sqrt(Variable1)); Writeln('Power(V1,10)',Power(Variable1,10)); Writeln(' ABS(V2)',ABS(Variable2)); Writeln(' Sqrt(-1*V1)',Sqrt(-1*Variable1));//runtime error 217 Should be NAN Writeln(' Sqrt(V2)',Sqrt(Variable2)); //runtime error 217 Should be NAN Writeln(' V1-V1',variable1-variable1); //runtime error 217 Should be NAN Writeln(' V1+V2',variable1+variable2); //runtime error 217 Should be NAN End. Running "i:\programming\test\testmath.exe " V1 +Inf V2 -Inf SQRT(-1) Nan V1*V1 +Inf V1*V2 -Inf V1+3 +Inf V1+V1 +Inf V1-3 +Inf Sqr(V1) +Inf Sqr(V2) +Inf Sqrt(-1) Nan Sqrt(V1) +Inf Power(V1,10) +Inf ABS(V2) +Inf An unhandled exception occurred at $00401A43: EInvalidOp: Invalid floating point operation $00401A43 main, line 22 of I:/Programming/Test/testmath.pas Sqrt(-1*V1) It seems to me that the whole purpose of +Inf, -Inf, and NaN was so you could evaluate complex formulas and NOT get a runtime error… Is this behavior just a bug that should be reported? Testing was done with V3.0.4 James
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal