在gsl-shell(a luajit based interface to gsl)中,我得到了
> 0/0==0/0
true
虽然是Lua 5.1的false
。
为什么?这种差异是否来自Luajit vs Lua,GSL库或gsl-shell接口?
答案 0 :(得分:2)
快速测试表明这是gsl-shell。 lua5.1和lua5.2(来自debian),lua 5.1(在CentOS 5上自编译)和luajit(来自git master,在debian上自编译)都给出了正确的行为(并返回nan
时0/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规则/数学函数规范的确切实现。*