在这样的循环中:
cur := -999999; // represent a minimal possible value hold by a Single type
while ... do
begin
if some_value > cur then
cur := some_value;
end;
System.Math中有MaxSingle / NegInfinity定义
MaxSingle = 340282346638528859811704183484516925440.0;
NegInfinity = -1.0 / 0.0;
在这种情况下,我应该使用 -MaxSingle 还是 NegInfinity ?
答案 0 :(得分:2)
我假设您正在尝试查找列表中的最大值。
如果您的值在数组中,只需使用库函数MaxValue()
。 (如果你看一下MaxValue
的实现,你会发现它将数组中的第一个值作为起点。)
如果您必须自己实施,请使用-MaxSingle
作为起始值,大约是-3.40e38。这是可以在Single
中表示的最负值。
Infinity
和NaN
等特殊值在比较中有特殊规则,所以除非您确定这些规则是什么,否则我会避免这些。 (另请参阅How do arbitrary floating point values compare to infinity?。事实上,似乎NegInfinity
可以正常工作。)
理解Single可以表示的值范围可能会有所帮助。顺便说一下,对大多数肯定是最负面的,它们是:
NegInfinity
-MaxSingle ..-MinSingle
0
MinSingle .. MaxSingle
无限