2016-11-18 11 views
0

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; 

MaxSingle/NegInfinitydefinedは、だから私はこのケースで-MaxSingleまたはNegInfinityを使用する必要があります

MaxSingle = 340282346638528859811704183484516925440.0; 
    NegInfinity = -1.0/0.0; 

System.Mathの

にあるのでしょうか?

+1

'cur:= cur.MinValue;'もうまくいきます。 [SysUtils.TSingleHelper](http://docwiki.embarcadero.com/Libraries/en/System.SysUtils.TSingleHelper)を参照してください。 –

+1

'cur'がすでに割り当てられているかどうかを記録するには、ブールフラグを使用します。魔法の価値に頼らないでください。おかげさまで –

答えて

2

リスト内で最大の値を見つけようとしているとします。

値が配列内にある場合は、ライブラリ関数MaxValue()を使用してください。 (あなたがMaxValueの実装を見れば、あなたはそれが出発点として、配列の最初の値をとることがわかります。)

は、あなたがそれを自分で実装する必要がある場合は、開始値として-MaxSingleを使用し、どの程度であります-3.40e38。これは、Singleで表すことができる最もマイナスの値です。

InfinityNaNのような特別な値は、比較の際に特別なルールを持っていますので、これらのルールが何であるか分からない限り、これらのルールは避けてください。 (How do arbitrary floating point values compare to infinity?も参照してください。実際にはNegInfinityは正常に動作します)

単一で表現できる値の範囲を理解するのに役立ちます。ためには、最も肯定的に最も否定的、彼らは以下のとおりです。

NegInfinity

-MaxSingle .. -MinSingle

MinSingle .. MaxSingle

インフィニティ

+1

Infinityを使用してもパフォーマンスに影響がないかどうかわからないため、Infinityの代わりに-MaxSingleを使用します –

関連する問題