DelphiTokyo 64位将使用单精度计算一些数学函数,如果使用整数常量调用,例如
{$apptype console}
uses
system.math;
var
d: double;
begin
d := 10;
writeln(log2(10):20:16, log2(10.0):20:16,log2(d):20:16);
end.
将打印CCD_ 1。
我在Delphi Tokyo中被告知64位将非正规数字刷新为零?,我应该使用typecastdouble(10)
来处理这个特性。问题是,从我可用的Delphi版本来看,只有Tokyo允许这种类型转换(IMO,尽管文档似乎禁止它,说只允许将变体转换为真实类型(。
我知道XE4(VER250(为double(10)
提供了错误Error: E2089 Invalid typecast
,但我没有关于VER260的信息。。VER310.
那么,哪个是第一个允许typecast
double(10)
的Delphi版本?
XE7失败。XE8出现故障。。。。在Delphi 10.1柏林失败。
因此,它似乎是在10.2东京推出的。
在(XE4(的早期版本中,您可以使用SysUtils:中的整数辅助方法
10.ToDouble
在此之前的版本中,使用变体转换:
VarAsType(10,varDouble)
适用于所有版本的函数:
function DoubleVal( x : Double) : Double; inline;
begin
Result := x;
end;