gslshell(基于Lua的)返回0/0 == 0/0为true。

3
在 gsl-shell(基于 luajit 的 gsl 接口)中,我得到了:
> 0/0==0/0
true

在Lua 5.1中,当它为false时,这是为什么?这个差异来自于Luajit vs Lua,GSL库还是gsl-shell接口?
2个回答

2
快速测试表明这是gsl-shell的问题。从debian上获取的lua5.1和lua5.2,自行编译的CentOS 5上的lua 5.1以及git主分支上的luajit(在debian上自行编译)都能够给出正确的结果(并且在直接打印0/0的结果时返回nan)。目前Windows版本的gsl-shell存在你提到的问题,当打印0/0的结果时会返回-2147483648。我无法解释它(甚至不能真正地推测),但它肯定似乎是一个gsl-shell的问题。

1

在 gsl-shell 邮件列表上询问后,发现这是因为 gsl-shell 是使用 -ffast-math 标志编译的,这个标志(令人惊讶地!)禁用了 NaN 和 Inf。1

根据 GCC 手册,我猜这个选项不应该被打开,特别是对于像 GSL-Shell 这样的数值应用程序。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接