問題タブ [floating-point-conversion]
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++ - デノルム数を解析して変換しますか?
C++ では、問題なく denorm 数を変数に格納できます。
次に、この変数を問題なく出力できます。
そして、それは印刷されます:
しかし、この数値を解析しようとすると問題が発生します。この数値がファイル内に保存され、文字列として読み取られると想像してください。問題はそれです:
例外をスローしstd::out_of_range
ます。
私の質問は次のとおりです。文字列に格納されたデノルム値を変換する方法は?
c++ - 単純な小数値を格納するための浮動小数点の代替手段
まず、私が解決しようとしている問題は、範囲内で常に均一に分布したままの値をより適切に表現することです。
これの動機は、このデータを格納するために使用されるバイト数を削減しようとすることです (アプリケーションはメモリと I/O 帯域幅に大きく依存しています)。現在、32 ビットの浮動小数点表現が使用されていますが、16 ビットの浮動小数点では精度が不十分であることが証明されています。
私の最初の考えは、データを 16 ビット整数で保存して、単純にスキームを使用することです。
アルゴリズムをほぼ同じに保ち、同じ浮動小数点ハードウェア演算の使用を (少なくとも最初は) 維持するために、理想的には、この小数表現を浮動小数点表現に変換し続け、演算を実行してから、ストレージ用に分数表現に変換し直します。
明らかに、これら 2 つのまったく異なる不正確な表現の間を行ったり来たりすると、精度が失われますが、このアプリケーションでは、これは許容できるトレードオフであると思われます。
私は、良い出発点を与えるかもしれない現在そこにあるものを見て、いくつかの調査を行いました. 重要な記事「すべてのコンピュータ科学者が浮動小数点演算について知っておくべきこと」( http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html )を読んで、他のいくつかの記事に目を向けました。 「Beyond Floating Point」( home.ccil.org/~cowan/temp/p319-clenshaw.pdf ) はその一例です。
これらの要件を満たす可能性のある他の場所で人々が使用した表現の他の例を誰かに教えてもらえますか?
私は、表現の正確さにおける潜在的な利益 (現在、この特定の範囲を使用することによって浮動小数点形式の多くを浪費している) が、分数表現から浮動小数点表現に移行するために 2 回丸めるという要件によって完全に上回ってしまうのではないかと懸念しています。指さしてまた戻る。その場合、このアプローチから利益を得るために、この分数表現を直接使用して演算を行うことが必要になる場合があります。この点に関するアドバイスは役に立ちますか?
python - 多数の一意のランダムな float32 数値を生成する
単精度の一意の乱数のみを含むバイナリ ファイルを生成する必要があります。目的は、このファイルのエントロピーを計算し、それを他のデータセットのエントロピーと一緒に使用して、比率 entropy_file/entropy_randUnique を計算することです。この値は「ランダム性」と呼ばれます。
Python で倍精度数を使用してこれを行うことができ、次のようset()
に使用して に挿入します。struct.pack
しかし、単精度に変更すると、pack メソッドを変更することはできません (同じ数値が大量に生成され、while が終了することはありません) random
。私は調べましnumpy
たが、ジェネレーターは私が理解したことと同じように機能します。どうすれば 370914252 (これが私の最大のテスト ケースです) バイナリ ファイル内で一意の float32 を取得できますか?それらがランダムでなくても、シャッフルされたシーケンスで十分だと思います..
c - 精度を落とさずに unsigned から double から unsigned に変換する
整数値を浮動小数点値に変換して元に戻すと、元の整数値と同じになりますか?
例えば:
コンパイラが浮動小数点変換を最適化しないと仮定すると、常にtruex == z
と評価されますか?
浮動小数点変換の表現エラーは常に値の増加になると思います。したがって、浮動小数点値が整数値に変換されると、値は切り捨てられ、常に元の整数値になります。
私の仮定は正しいですか?
java - 浮動小数点値の出力
私はこのコードサンプルを持っています:
「1.234567712E9」または同様のものを印刷する代わりに、「1.23456768E9」を印刷します。私が理解しているように、これはバイナリレベルでの精度と関係があります。
浮動小数点数 (コンマ (",") 記号の前後) の精度は 2 進数で何桁ですか? なぜこのようなことが起こるのか、簡単に説明できますか?
c# - 浮動小数点演算 (整数) は正確ですか?
入力を変更するライブラリがあります (入力に 1 つ以上の格納された変数を追加または乗算します)。これらの変数は float として格納されます。通常、入力も float ですが、int の場合もあります。この精度が気になります。
これをより安全にするためにできることはありますか?値の変更は動的である必要があり、変更を整数演算と浮動小数点演算に分離すると混乱します。これは私が思うほど安全ではありませんか、それともこのような操作は(int)(2.0f+(float)3)
常に期待どおりの結果をもたらしますか?
go - Goで除算を強制的に浮動小数点にするにはどうすればよいですか?
次のコード スニペットがあります。
-a 3 および -b 2 コマンド ライン引数の場合、出力は次のようになります。%!f(int=1)
この除算を強制的に浮動小数点にする最良/最もエレガントな方法は何ですか?
c - 浮動小数点変換の仮定: (int)(float)n == n
私はそれを仮定し(int)(float)n == n
てもint n
いいですか?少なくとも、負でない 31 ビット値にはこれが必要です。
補遺。どう(int)(double)n ==n
ですか?