在 gsl-shell(基于 luajit 的 gsl 接口)中,我得到了:
在Lua 5.1中,当它为
> 0/0==0/0
true
在Lua 5.1中,当它为
false
时,这是为什么?这个差异来自于Luajit vs Lua,GSL库还是gsl-shell接口?> 0/0==0/0
true
false
时,这是为什么?这个差异来自于Luajit vs Lua,GSL库还是gsl-shell接口?0/0
的结果时返回nan
)。目前Windows版本的gsl-shell存在你提到的问题,当打印0/0
的结果时会返回-2147483648
。我无法解释它(甚至不能真正地推测),但它肯定似乎是一个gsl-shell的问题。在 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 选项都不应该打开这个选项,因为它可能导致输出不正确。*