Delphi Tokyo 64-bit将使用单精度计算一些数学函数,如果使用整数常量调用,例如
{$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.
Run Code Online (Sandbox Code Playgroud)
将打印3.3219280242919923 3.3219280948873626 3.3219280948873626.
我被告知在Delphi东京64位刷新非正常数字为零?,我应该使用类型转换double(10)来解决此功能.问题是,从我可用的Delphi版本开始,只有东京允许这种类型转换(IMO,即使文档似乎禁止它,说只允许变体被转换为真实类型).
我知道,XE4(VER250)给出了错误Error: E2089 Invalid typecast的double(10),但我不知道VER260 .. VER310信息.
那么第一个允许类型转换的Delphi版本
double(10)呢?
XE7失败了.XE8失败了....在Delphi 10.1柏林失败.
所以它似乎是在东京10.2中引入的.
在以前的版本从(XE4),可以使用在整数辅助方法sysutils的:
10.ToDouble
Run Code Online (Sandbox Code Playgroud)
在之前的版本中,使用变体转换:
VarAsType(10,varDouble)
Run Code Online (Sandbox Code Playgroud)
一个适用于所有版本的函数:
function DoubleVal( x : Double) : Double; inline;
begin
Result := x;
end;
Run Code Online (Sandbox Code Playgroud)