gslshell(基于lua)返回0/0 == 0/0为真

时间:2014-01-08 17:34:39

标签: performance gcc lua floating-point

在gsl-shell(a luajit based interface to gsl)中,我得到了

> 0/0==0/0
true

虽然是Lua 5.1的false。 为什么?这种差异是否来自Luajit vs Lua,GSL库或gsl-shell接口?

2 个答案:

答案 0 :(得分:2)

快速测试表明这是gsl-shell。 lua5.1和lua5.2(来自debian),lua 5.1(在CentOS 5上自编译)和luajit(来自git master,在debian上自编译)都给出了正确的行为(并返回nan0/0的结果将直接打印。当前构建的gsl-shell(适用于Windows)具有您指定的行为,并在打印-2147483648的结果时返回0/0

我无法解释它(或者甚至无法理解它)但它似乎肯定是一个gsl-shell问题。

答案 1 :(得分:1)

询问gsl-shell邮件列表。发现

  

那是因为gsl-shell是用-ffast-math标志编译的,   (令人惊讶的是!)禁用了nans和infs。1

Per GCC manual,我想这个选项不应该像GSL-Shell这样的数字应用程序打开。

* - FFAST-数学     设置-fno-math-errno,-funsafe-math-optimizations,     -fno-trapping-math,-finite-math-only,-fno-rounding-math,-fno-signaling-nans和fcx-limited-range。    此选项会导致定义预处理器宏 FAST_MATH 。    任何-O选项都不应该打开此选项,因为它可能导致程序的输出不正确,这取决于IEEE或ISO规则/数学函数规范的确切实现。*