0

簡単な質問があります。たとえば、最大 15 桁の非常に大きな数値があるとします。入力を取得して、2 つの数値を比較する場合、1 つの float と 1 つの double の 2 つの変数に割り当てます。どのようにそれらを比較しますか? double の精度は 15 桁程度だと思いますか? float は 8 ですか? それで、フロートに8桁しか含まれていない間にそれらを比較して残りを埋めますか、それとも15桁すべてを出力してから比較するフロートを持っていますか? また、浮動小数点数を出力するように求められた場合、8桁まで出力するのが標準的な方法ですか? これはその最大精度です

ありがとう

4

3 に答える 3

0

ここでは、数字で考えることが問題になる可能性があります。フロートは、負の無限大から正の無限大までの範囲を持つことができます。たとえば、C#の場合、範囲は±1.5×10 ^ −45〜±3.4×10 ^ 38で、精度は7桁です。

また、IEEE754はfloatとdoubleを定義しています。ここに役立つかもしれないリンクがありますhttp://en.wikipedia.org/wiki/IEEE_floating_point

于 2012-08-15T17:12:53.063 に答える
0

ほとんどの言語は、何らかの形式の型昇格を行って、同一ではないがかなり類似している型を比較できるようにします。詳細については、参照している言語を示す必要があります。

もちろん、浮動小数点数を比較する際の実際の問題は、丸め誤差のために結果が予期しないものになる可能性があることです。ほとんどの数学的な等価性は浮動小数点演算には当てはまらないため、同じ値を生成する必要がある 2 つの演算シーケンスが、実際にはわずかに異なる値 (注意しないと非常に異なる値でさえ) を生成する可能性があります。

編集:印刷に関しては、「標準的な方法」は必要なものに基づいています。なんらかの理由で、浮動小数点で通貨の計算を行っている場合、10 進数 2 桁だけを出力したい可能性があります。

于 2012-08-15T17:06:28.840 に答える
-1

あなたの質問は正しいものです。ただし、アプローチを検討する必要があります。

32ビットであろうと64ビットであろうと、浮動小数点表現は数値が等しいかどうかを比較するためのものではありません。たとえば2.0/7.0 == 60.0/210.0、CPUのビューでは、アサーションが真である場合とそうでない場合があります。概念的には、浮動小数点は本質的に不正確であることを意味します。

数値が等しいかどうかを比較する場合は、整数を使用します。最後の段落の比率をもう一度考えてみてください。常に真であるという主張2*210 == 7*60-これらは以前と同じ4つの数値の整数バージョンであり、除算ではなく乗算を使用してのみ関連していることに注意してください。あなたが本当に探しているのはこのようなものだと思われます。

于 2012-08-15T17:12:57.407 に答える