問題タブ [ieee-754]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 数値変換が値を変更するかどうかをテストする方法は?
uint
、long
、ulong
およびdecimal
を IEEE 754 倍精度浮動小数点値として表す必要があるデータ型変換を実行しています。変換を実行する前に、IEEE 754 データ型に値を含めることができないかどうかを検出できるようにしたいと考えています。
強引な解決策は、キャストの周りに try-catch をラップして、 をダブル検索することですOverflowException
。特定のCLR ドキュメントを読むと、一部の変換では例外なく値が暗黙的に変更されることがわかります。
このチェックを行う簡単な方法はありますか? 実装の容易さよりも完全性を求めています。IEEE 754仕様をよく読んで、マティッサと指数を注意深くチェックするつもりだと思います...
私は、整数を正確に表現することに最も関心があり、浮動小数点の精度の低下は二次的な懸念事項であることを付け加えておきます (ただし、検討する価値はあります)。
編集: Int32 は IEE-754 として完全に表現できます。また、Decimal
データ型も問題の大部分です。
重要な更新:この質問を参照している場合は、次の質問も読む必要があります: IEEE-754 Double (64-bit float) vs. Long (64-bit Integer) Revisited
一部の非常に大きな値もIEEE-754で正確に表現できるという回答の欠陥に注意してください。これは値が正しく往復することを意味するかもしれませんが、私の本来の目的 (JavaScript に往復するかどうか) ではそうではありません。
また、CLR の System.Double 型にもバグがあるようです。これは、これらの値の往復が正しく許可されていないためです。
iphone - iPhoneでダブルvsフロート
私はちょうどiphoneがネイティブに2倍にすることができないと聞いたので、通常のフロートよりもはるかに遅くなります。
これは本当ですか?証拠?
私のプログラムには高精度の計算が必要であり、速度に妥協する必要があるため、この問題に非常に興味があります。
c++ - 32ビットから16ビットへの浮動小数点変換
32ビットと16ビットの浮動小数点数の間で変換するクロスプラットフォームのライブラリ/アルゴリズムが必要です。16ビットの数値で数学を実行する必要はありません。32ビットフロートのサイズを小さくして、ネットワーク経由で送信できるようにする必要があります。私はC++で作業しています。
どれだけの精度が失われるかは理解していますが、それは私のアプリケーションでは問題ありません。
IEEE16ビット形式は素晴らしいでしょう。
c# - 同じ内部表現を持つ float/double の最小値/最大値を見つけます
浮動小数点( PDFも)、IEEE-754 を更新し、文字列に変換するときの浮動小数点の丸めに関するこのディスカッションに参加して、いじくり回しました。は同じ。
免責事項: この議論では、IEEE-754 で説明されているように、32 ビットと 64 ビットの浮動小数点に固執したいと思います。拡張浮動小数点 (80 ビット) やクワッド (128 ビット IEEE-754-2008)、その他の標準 (IEEE-854) には興味がありません。
背景: コンピュータは0.1
バイナリ表現で表現するのが苦手です。C# では、float はこれを3DCCCCCD
内部的に (C# は最も近い値への丸めを使用する) として表し、double は として表し3FB999999999999A
ます。0.100000005
10 進数(float) と0.1000000000000000124
(double) には同じビット パターンが使用されますが、(double) には使用されません0.1000000000000000144
。
便宜上、次の C# コードはこれらの内部表現を示しています。
の場合0.1
、同じビット パターンで表される下位の 10 進数はなく、いずれも0.99...99
異なるビット表現が生成されます (つまり、内部的に0.999999937
生成される浮動小数点数)。3F7FFFFF
私の質問は簡単です。同じバイナリ表現で内部的に格納されている特定の float (または double) の 10 進数の最小値と最大値を見つけるにはどうすればよいですか。
理由: (質問されることは承知しています) .NET を文字列に変換するとき、および文字列から変換するときの丸めのエラーを見つけ、内部の正確な値を見つけ、自分の丸めエラーをよりよく理解するためです。
私の推測では、仮数を取り、残りを削除し、正確な値を取得し、1 つ (仮数ビット) 高くして、平均を計算します。それより下の値は同じビット パターンになります。私の主な問題は、小数部分を整数として取得する方法です(ビット操作は私の最強の資産ではありません)。Jon Skeet の DoubleConverterクラスが役に立つかもしれません。
python - Python float - str - フロートの奇妙さ
ここで何が起こっているのですか?0.47000000000000003
文字列に変換し、結果の値を float に戻すにはどうすればよいですか?
WindowsでPython 2.5.4を使用しています。
java - Javaフロートをバイト表現でソートできますか?
私はHadoopで作業しており、オブジェクトを生のネットワーク順序バイト配列としてソートするためのコンパレーターを提供する必要があります。これは私にとって整数で行うのは簡単です-私は各バイトを順番に比較するだけです。フロートについてもこれを行う必要があります。Javaで使用されるfloatのIEEE754形式は、各バイトを符号付き8ビット値として比較するだけでソートできると思いますが、参照は見つかりません。
誰かがこれを確認または反論できますか?
編集:表現はIEEE75432ビット浮動小数点です。私は実際に(より大きな)バイトバッファとそのバッファ内のオフセットと長さを持っています。これをフロートに簡単に変換できるユーティリティメソッドがすでにいくつかあるので、この質問は議論の余地があると思います。誰かが答えを知っているかどうか私はまだ興味があります。
python - ldexpとfrexpはPythonでどのように機能しますか?
Pythonのfrexp関数とldexp関数は、floatを仮数と指数に分割します。このプロセスが実際のfloat構造を公開するのか、それともPythonが高価な対数呼び出しを行う必要があるのかを誰かが知っていますか?
types - doubleに格納できる最大の整数
精度を失うことなくIEEE754倍精度型に格納できる最大の「浮動小数点なし」整数は何ですか?
c++ - IEEE-754 形式の整数を float として出力する方法
IEEE-754 形式を使用して float を表す unsigned long integer 値があります。C ++でフロートとして出力する最も簡単な方法は何ですか?
私は 1 つの方法を知っていますが、C++ にもっと便利な便利なユーティリティがあるかどうか疑問に思っています。
私が知っている方法の例は次のとおりです。
(これは "float value is: 5" を出力します)
c - FPU丸めモードに依存せずにdoubleをfloatに変換する
FPUの現在の丸めモードについて何も変更したり、想定したりせずdouble
に、IEEE 754をすぐに劣る(または優れた)float
に変換するためのコードのスニペットを手元に持っている人はいますか?
注: この制約は、おそらく FPU をまったく使用しないことを意味します。これらの条件でそれを行う最も簡単な方法は、倍精度のビットを 64 ビットの長さで読み取り、それを操作することだと思います。
簡単にするために、選択したエンディアンを想定できます。また、問題の double は、d
以下の共用体のフィールドを介して使用できると想定できます。
私はそれを自分でやろうとしますが、非正規化または負の数に対して気づきにくいバグを導入することは確かです.