1

この質問はとても簡単です。これは次のものに関連していますが、間違いなくだまされていません:

パッチが適用されていない Tomcat Web サーバーのほとんどは脆弱です。誰が悪いのでしょうか?

浮動小数点数で問題が発生する可能性のある驚くべき量のことを確認しました (異なるアーキテクチャでの異なる結果、誤って使用した場合の間違った結果、2 つの異なる言語に影響する 2 つのサービス拒否クラッシュなどを含みますが、これらに限定されません)。非常に単純な質問に疑問を抱いています:

イプシロンなしで使用される浮動小数点数は、常にコードの匂いまたは仕様の匂いですか?

(つまり、浮動小数点数は科学計算にのみ使用されるべきであり、残りはすべて固定数の精度のビットを使用して実行されるべきでしょうか?)

4

2 に答える 2

5

いいえ、必ずしもコードの臭いではありませ

実際、私の仕事(低レベルの高性能ライブラリ)では、許容誤差のある浮動小数点の比較コードの臭いです。これらは、プログラマーが浮動小数点を理解していないか、の数値を完全に理解していないことを示しています。彼らが実装しているアルゴリズムは、コードの残りの部分を非常に綿密に読む必要があるという大きな警告ベルを鳴らします。

それはそれらが決して使用されるべきではないということではありません。それが正しいことである多くの状況(おそらくほとんどの状況でさえ)があります。すべての厳格なルールが愚かであると言うだけです、これは含まれています。


あなたの明確な質問に対して:「浮動小数点数は実際には科学計算にのみ使用されるべきであり、残りはすべて固定数の精度を使用して行われるべきですか?」

もちろん違います。それは莫大なエンジニアリングの負担であり、起動するのは非常に非効率的です。経験の浅いプログラマーにとって、浮動小数点の場合と同じように、整数演算(オーバーフロー、除算の切り捨て、範囲外の配列アクセスなど)を使用して自分の足を撃つのは簡単です。浮動小数点は、大多数のプログラマーにとって非常に便利です。そうでなければ、それは使われなかったでしょう。

すべてのものと同様に、時間をかけてツールについて学び、仕事に適したツールを使用してください。

于 2011-02-11T00:56:10.717 に答える
1

正確さを必要としない場合もあります。ゲーム エンジンは常にレンダリングに浮動小数点を使用します。同様に、フロートを使用して通貨の計算を行うことはありませんが、フロートを使用してグラフ システムを作成することは問題ではありません。

問題は、2 つの異なるデータ セット (1 つは非正確、もう 1 つは正確 (またはより正確)) を混同するときに発生します。そして、世界が巨大になると、単精度浮動小数点数が大きな丸め誤差を示し始めます。完全なグローバル位置座標の許容差は、2D ローカル領域から 3D 画面空間への座標系の許容差と同じではありません。

于 2011-02-11T00:19:18.363 に答える