The compiler does seem to be filtering out the conditions that hard coded to 
resolve to NaN. That explains the seemingly inconsistent results, when I set 
variables and try the operations that seemed to work before they now produce 
the error.
Thanks for pointing that out.


-----Original Message-----
From: fpc-pascal [mailto:fpc-pascal-boun...@lists.freepascal.org] On Behalf Of 
g...@wolfgang-ehrhardt.de
Sent: Thursday, June 21, 2018 2:46 AM
To: FPC-Pascal users discussions <fpc-pascal@lists.freepascal.org>
Subject: Re: [fpc-pascal] math with infinity and NaN


Quoting James Richters <ja...@productionautomation.net>:

> SetExceptionMask(GetExceptionMask + [exInvalidOp]);   Works!     
> Thank  you for the help!
>
> I'm curious why things like SQRT(-1) just produce NAN without needing 
> to change the exception mask and (+inf) - (+inf) does not behave the 
> same way.  They both are invalid,  why treat one method of generating 
> an invalid number one way and another method of getting just as 
> invalid of a number another way?  If there is flexibility in the 
> standard, then why not choose to always be
> consistent?    I have a lot of examples of things that do produce  
> NAN without needing to change the exception mask... like ln(-1) or
> 0/0  why do some cause the exception and others do not?

The case SQRT(-1) seems to be handled by the compiler, just like the definition 
Nan = 0/0 in math.

If you have an expression, which is not handled at compile time you get the 
EInvalidOp exception, try

variable2 := Pi-4;
variable1 := sqrt(variable2);
Writeln(variable1);

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org 
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to