与Delphi中的最小单个数字进行比较时,使用的正确常量是多少?

时间:2016-11-18 09:52:12

标签: delphi

在这样的循环中:

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

1 个答案:

答案 0 :(得分:2)

我假设您正在尝试查找列表中的最大值。

如果您的值在数组中,只需使用库函数MaxValue()。 (如果你看一下MaxValue的实现,你会发现它将数组中的第一个值作为起点。)

如果您必须自己实施,请使用-MaxSingle作为起始值,大约是-3.40e38。这是可以在Single中表示的最负值。

InfinityNaN等特殊值在比较中有特殊规则,所以除非您确定这些规则是什么,否则我会避免这些。 (另请参阅How do arbitrary floating point values compare to infinity?。事实上,似乎NegInfinity可以正常工作。)

理解Single可以表示的值范围可能会有所帮助。顺便说一下,对大多数肯定是最负面的,它们是:

  

NegInfinity

     

-MaxSingle ..-MinSingle

     

0

     

MinSingle .. MaxSingle

     

无限