我有一个var Extended
参数的函数。如果我在调用函数时尝试使用Double
类型参数,编译器会抱怨。但是,如果我将Extended
值作为函数Result
传递回来(并分配给Double
变量),那么编译器很高兴。
这是预期的吗?如果是这样,有没有办法欺骗编译器降低参数的精度以匹配参数?
function foo1(var e: extended): boolean;
begin
e := 0.0;
Result := true;
end;
function foo2(): extended;
begin
Result := 0.0;
end;
procedure CallFoo();
var
d: double;
begin
if foo1(d) then Exit; // compiler complains
d := foo2; // compiler happy
end;
答案 0 :(得分:3)
var
参数要求实际参数完全匹配。您只能传递Extended
变量。
您可以选择为您需要的每种浮点类型引入重载。但我的建议是停止使用Extended
并切换到Double
。 Extended
类型仅存在于32个英特尔平台上,并且很少提供超过Double
的任何优势。相反,它的10个字节的异常大小经常导致由于未对准和低效的高速缓存使用而导致的性能不佳。