2015-01-20 85 views
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 

爲什麼會發生這種情況?

+2

LLVM 3.4與GHC 7.8.4和7.8.3在x64的Linux提供了NaN的兩者。 – 2015-01-20 20:52:21

+1

您使用的是什麼版本的GHC?這顯然是/是一個錯誤。 – dfeuer 2015-01-20 22:19:13

+6

我會認爲它是一個錯誤,儘管根據某些規範它可能已被接受。 LLVM顯然在這裏推出了一些優化,它假設了非負的參數,使得√(-7)未定義的行爲。 – leftaroundabout 2015-01-20 22:47:39

回答

相關問題