[go: up one dir, main page]

Skip to content
/ infnan Public

Fortran functions for checking Inf/NaN. They should work even if the compilers are invoked with aggressive optimization flags such as `gfortran -Ofast`.

License

Notifications You must be signed in to change notification settings

equipez/infnan

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

infnan

infnan.f90 implements a module that provides some functions for checking Inf/NaN. They aim to work even when compilers are invoked with aggressive optimization flags, including particularly gfortran -Ofast.

Many ways exist to implement functions like is_nan. However, not all of them work with aggressive optimization flags. For example, there are such discussions on StackOverflow and Fotran Discourse.

The ieee_is_nan included in ieee_arithmetic of gfortran 9.3.0 does not work with aggressive optimization flags like -Ofast. Given the fact that -Ofast implies -ffinite-math-only, we cannot blame ieee_arithmetic for the failure. In addition, some compilers (gfortran 9.3.0, ifort 21.0, and nagfor 7.0) may not behave in the most desirable way concerning the return kind of ieee_is_nan when some special compilation flags are imposed, as has been discussed on Fortran Discourse.

My choice of implementation is totally empirical, in the sense that I have not studied in-depth what the aggressive optimization flags really do, but only made some tests and found some implementation that worked correctly. In other words, I do not know why my implementation works but other implementations may not. The story may change when compilers are changed/updated.

The good news is, I have tested the functions using ten compilers with the most aggressive optimization flags that I can figure out, and they all succeeded. In particular, the functions work well with gfortran -Ofast for gfortran 9.3.0 and 10.3.0, but those based on ieee_arithmetic fail. Such a test can be done by

cd test && make clean && make gtest

However, we did observe failures. See the issues for details. I will be very happy to hear your suggestions on how to fix them.

About

Fortran functions for checking Inf/NaN. They should work even if the compilers are invoked with aggressive optimization flags such as `gfortran -Ofast`.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published