对于64位版本,Trunc()针对高Int64失败

时间:2018-01-17 12:49:47

标签: delphi 64-bit

为什么以下代码在64位版本中失败(但适用于32位版本)?

var
  TruncTmp: Extended;
begin
  TruncTmp := 9223372036854775296;
  TruncTmp := Trunc(TruncTmp); // this fails on 64-bit
  Assert(TruncTmp = 9223372036854775296);
end;
  

$ 0000000000405D70的第一次机会异常。异常类$ C0000090,带有消息' c0000090 FLOAT_INVALID_OPERATION'。

这是一个错误还是我错过了什么?

注意:

  • 我使用的是Delphi 10.2
  • 数字< 9223372036854775296工作正常

1 个答案:

答案 0 :(得分:12)

Win64下没有“扩展”(80位FP)类型 - 它只是“double”(64位FP)的别名。所以你只有双倍的53位分辨率。

所以我的猜测是你的情况符合预期。