24
编译下面的程序:为什么用-fllvm编译这个Haskell程序会产生不同的结果?
main = print (sqrt (-7))
在OSX约塞米蒂,LLVM版本3.4.2,目标x86_64的-苹果darwin14.0.0,GHC 7.8.4产生两个不同的结果,这取决于使用LLVM:
apple1$ ghc -fforce-recomp a.hs -o a; ./a
[1 of 1] Compiling Main (a.hs, a.o)
Linking a ...
NaN
apple1$ ghc -fforce-recomp -fllvm a.hs -o a; ./a
[1 of 1] Compiling Main (a.hs, a.o)
Linking a ...
0.0
为什么会发生这种情况?
LLVM 3.4与GHC 7.8.4和7.8.3在x64的Linux提供了NaN的两者。 – 2015-01-20 20:52:21
您使用的是什么版本的GHC?这显然是/是一个错误。 – dfeuer 2015-01-20 22:19:13
我会认为它是一个错误,尽管根据某些规范它可能已被接受。 LLVM显然在这里推出了一些优化,它假设了非负的参数,使得√(-7)未定义的行为。 – leftaroundabout 2015-01-20 22:47:39