float2Int
은 64 비트 컴퓨터의 경우 2^^62
과 2^^63
사이에서 오버플로하는 것으로 보입니다 (GHC 7.6.1을 사용하는 Intel iMac에서 사용). maxBound
(Int
)을 확인하려고 할 때이 문제가 나타났습니다. float2Int
은 GHC에서 primop float2Int#
으로 구현됩니다.float2 대문자와 소문자를 구분하여 사용하는 동작
GHCi 프롬프트 출력이 -인 경우 Intel Intel Mac에 2^^63
입니다. 나는 또한 2^^63
을 Float
으로 캐스팅 해보고 오버 플로우가 사라지는지 약간의 값을 줄이기 위해 (만약 있다면 작은 반올림 오류를 설명하기 위해). 그렇지 않습니다 :
λ: maxBound :: Int
9223372036854775807
λ: GHC.Float.float2Int $ 2^^63 -- overflows
-9223372036854775808
λ: GHC.Float.float2Int $ (9223372036854775807::Float) -- now try actual value of 2^^63
-9223372036854775808
λ: GHC.Float.float2Int $ (9223372036854000000::Float) -- reduce it a bit
-9223372036854775808
λ: minBound :: Int -- overflow value is same as minBound::Int
-9223372036854775808
λ: GHC.Float.float2Int $ 2^^62 + 2^^61 -- works fine here
6917529027641081856
64 비트 Int 경계에서 오버플로가 예상되는 동작입니까? 2^^62
까지 잘 작동하는 것으로 보이며 2^^62
과 2^^63
사이에서 오버플로됩니다. 나는 GHC trac를보고 어떤 버그가보고되었는지 발견하지 못했습니다. 나는 이것에 관해서 어느 쪽의 쪽이라도 그것에 관한 어떤 지위도 발견하지 않았다.