タグ付けされた質問 「floating-point」

浮動小数点数は実数の近似値であり、整数より広い範囲を表すことができますが、同じ量のメモリを使用しますが、精度は低くなります。質問が小さな算術エラー(たとえば、0.2 + 0.1が0.300000001に等しいのはなぜですか)または10進数の変換エラーについての質問である場合は、投稿する前に以下のリンクの「情報」ページをお読みください。

3
なぜインテル®C ++コンパイラーでNaN-NaN == 0.0なのですか?
NaNが算術で伝播することはよく知られていますが、デモを見つけることができなかったため、簡単なテストを作成しました。 #include <limits> #include <cstdio> int main(int argc, char* argv[]) { float qNaN = std::numeric_limits<float>::quiet_NaN(); float neg = -qNaN; float sub1 = 6.0f - qNaN; float sub2 = qNaN - 6.0f; float sub3 = qNaN - qNaN; float add1 = 6.0f + qNaN; float add2 = qNaN + qNaN; float …
300 c++  c  floating-point  ieee-754  icc 


6
合計の順序を変更すると、異なる結果が返されるのはなぜですか?
合計の順序を変更すると、異なる結果が返されるのはなぜですか? 23.53 + 5.88 + 17.64 = 47.05 23.53 + 17.64 + 5.88 = 47.050000000000004 JavaとJavaScriptはどちらも同じ結果を返します。 浮動小数点数が2進数で表現される方法が原因で、一部の有理数(1/3-0.333333 ...など)を正確に表現できないことを理解しています。 要素の順序を変更するだけで結果が影響を受けるのはなぜですか?

2
一部のfloat <integer比較が他のものより4倍遅いのはなぜですか?
浮動小数点数を整数と比較する場合、値のペアによっては、同様の大きさの他の値よりも評価に時間がかかります。 例えば: &gt;&gt;&gt; import timeit &gt;&gt;&gt; timeit.timeit("562949953420000.7 &lt; 562949953421000") # run 1 million times 0.5387085462592742 しかし、浮動小数点数または整数を一定量だけ小さくまたは大きくすると、比較ははるかに速く実行されます。 &gt;&gt;&gt; timeit.timeit("562949953420000.7 &lt; 562949953422000") # integer increased by 1000 0.1481498428446173 &gt;&gt;&gt; timeit.timeit("562949953423001.8 &lt; 562949953421000") # float increased by 3001.1 0.1459577925548956 比較演算子を変更しても(例:==または&gt;代わりに)、時間に顕著な影響を与えることはありません。 大きい値または小さい値を選択すると比較が高速になるため、これはマグニチュードだけに関連しているわけではないので、ビットの並び方が不運なことにあるのではないかと思います。 明らかに、これらの値を比較することは、ほとんどのユースケースで十分な速さです。なぜPythonが他の値のペアよりもいくつかの値のペアで苦労しているように見えるのか、私は単に興味があります。

19
10進数を2進数で正確に表現できないのはなぜですか?
浮動小数点表現についてSOに投稿された質問がいくつかあります。たとえば、10進数0.1には正確な2進数表現がないため、==演算子を使用して別の浮動小数点数と比較するのは危険です。浮動小数点表現の背後にある原理を理解しています。 私が理解していないのは、数学的な観点から、小数点の右側の数値が左側の数値よりも「特別」である理由です。 たとえば、61.0という数値は、任意の数値の整数部分が常に正確であるため、正確なバイナリ表現になります。しかし、6.10という数値は正確ではありません。私がしたことは、小数点を1桁移動することだけでしたが、突然、ExactopiaからInexactvilleに移動しました。数学的には、2つの数値の間に本質的な違いがあってはなりません。それらは単なる数値です。 それとは対照的に、小数部を反対方向に1桁動かして610を生成しても、Exactopiaのままです。私はその方向(6100、610000000、610000000000000)に進むことができますが、それらはまだ正確です。ただし、小数がしきい値を超えるとすぐに、数値は正確ではなくなります。 どうしたの? 編集:明確にするために、IEEEなどの業界標準の表現についての議論は避け、数学的に「純粋な」方法であると私が信じるものに固執したいと思います。基数10では、位置の値は次のとおりです。 ... 1000 100 10 1 1/10 1/100 ... バイナリでは、次のようになります。 ... 8 4 2 1 1/2 1/4 1/8 ... また、これらの数に任意の制限はありません。位置は左と右に無制限に増加します。

3
ActiveRecordのFloatとDecimal
時々、Activerecordデータタイプは私を混乱させます。エラー、よくあります。私の永遠の質問の1つは、特定のケースについて、 私が使用する必要があります:decimalか:float? 私は頻繁にこのリンクに出くわしました、ActiveRecord::decimal vs:float?、しかし答えは私が確信できるほど明確ではありません: 浮動小数点を使用せず、常に10進数を使用することをお勧めするスレッドがたくさんあります。また、フロートを科学的用途にのみ使用するという提案もいくつかあります。 いくつかのケース例を以下に示します。 ジオロケーション/緯度/経度:-45.756688、120.5777777、... 比率/割合:0.9、1.25、1.333、1.4143、... 私は:decimal以前に使用しましたがBigDecimal、Ruby でオブジェクトを処理することは、フロートに比べて不必要に扱いにくいことに気付きました。:integerたとえば、お金やセントを表すために使用できることもわかっていますが、たとえば、精度が時間の経過とともに変化する可能性がある場合など、他のケースにはあまり適していません。 それぞれを使用する利点/欠点は何ですか? どのタイプを使用するかを知るための良い経験則は何でしょうか?



12
IEEE754 NaN値に対してfalseを返すすべての比較の根拠は何ですか?
NaN値の比較が他のすべての値と異なる動作をするのはなぜですか?つまり、演算子==、&lt;=、&gt; =、&lt;、&gt;のいずれかまたは両方の値がNaNであるすべての比較は、他のすべての値の動作とは逆に、falseを返します。 これにより数値計算がある程度簡略化されたと思いますが、他の設計上の決定について詳細に説明しているKahanによるIEEE 754のステータスに関する講義ノートでさえ、明確に述べられた理由を見つけることができませんでした。 この逸脱した動作は、単純なデータ処理を行うときに問題を引き起こしています。たとえば、Cプログラムでいくつかの実数値フィールドに対してレコードのリストを並べ替える場合、NaNを最大要素として処理する追加のコードを記述する必要があります。そうしないと、並べ替えアルゴリズムが混乱する可能性があります。 編集: これまでの答えはすべて、NaNを比較することは無意味であると主張しています。 私は同意しますが、これは正解が偽であることを意味するのではなく、幸いなことに存在しないブール値ではない(NaB)です。 したがって、比較に対してtrueまたはfalseを返すかどうかの選択は、私の見解では任意であり、一般的なデータ処理では、データ構造を考慮せずに、通常の法則(==の再帰性、&lt;、==、&gt;のトリコトミー)に従うと有利です。これらの法律に依存するものは混乱します。 だから私は、哲学的推論だけでなく、これらの法律を破ることのいくつかの具体的な利点を求めています。 編集2: NaNを最大にすることが悪い考えになる理由が今理解できたと思います、それは上限の計算を台無しにするでしょう。 NaN!= NaNは、次のようなループで収束を検出しないようにするために望ましい場合があります。 while (x != oldX) { oldX = x; x = better_approximation(x); } ただし、絶対的な違いを小さな制限と比較することで記述します。だから私見これはNaNで反射性を壊すための比較的弱い議論です。

12
10進数の代わりにdoubleを使用する必要があるのはいつですか?
代わりにdouble(またはfloat)を使用することには、次の3つの利点がありdecimalます。 より少ないメモリを使用します。 浮動小数点演算がプロセッサによってネイティブにサポートされているため、より高速です。 より広い範囲の数値を表すことができます。 しかし、これらの利点は、モデリングソフトウェアで見られるような計算集約型の操作にのみ適用されるようです。もちろん、財務計算などの精度が必要な場合は、doubleを使用しないでください。では、「通常の」アプリケーションの代わりにこれまでにdouble(またはfloat)を選択する実用的な理由はありdecimalますか? 追加のために編集:すべてのすばらしい応答をありがとう、私はそれらから学んだ。 もう1つの質問:一部の人々は、doubleは実数をより正確に表すことができると主張しました。宣言されたとき、私はそれらが通常それらをより正確に表すと思います。しかし、浮動小数点演算が実行されると、精度が(時には大幅に)低下する可能性があるというのは本当のことですか?


9
小数点以下8桁の緯度/経度に使用するMySQLデータ型は何ですか?
私は地図データを使用してLatitude/Longitudeおり、小数点以下8桁まで拡張しています。例えば: Latitude 40.71727401 Longitude -74.00898606 私は 使用するGoogleドキュメントで見ました: lat FLOAT( 10, 6 ) NOT NULL, lng FLOAT( 10, 6 ) NOT NULL ただし、それらの小数点以下の桁数は6 になりますFLOAT(10, 8)。正確にするために、このデータを保存するために別の方法を使用する必要があるかどうかを検討してください。マップ計算で使用されます。ありがとう!




弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.