浮動小数点数を使用する場合、数値は複数の表現を持つことができるため、浮動小数点の除算の結果はビットごとに異なる浮動小数点数を生成する可能性があります。しかし、分母が2の威力であればどうでしょうか?浮動小数点の除算のビット表現 - 浮動小数点の除算の仕方
AFAIKは、2の累乗で除算すると指数をシフトし、同じ仮数を残して、常にビットごとに同じ浮動小数点を生成します。そうですか?浮動用IEEE黒魔術での知識の私の不足のため申し訳ありません
float a = xxx;
float result = n/1024f; // always the same result?
--- UPDATE ----------------------
ポイント::)しかし、私はGuvanteが言及した数字について話しています:特定の10進数の表現、 '不正確な'浮動小数点。この記事の残りの部分では、Guvanteのこれらの言葉の定義を考慮して、「正確」と「不正確」を使用します。
簡略化するために、分子は常に「正確な」数であるとしましょう。また、2の累乗ではなく、常に1024で割ってみましょう。さらに、毎回同じ方法で同じ操作をしていますので、異なる実行で同じ結果を得ることについて話しています(同じ入力、確かに)。
私は同じ入力から異なる数字が来るのを見るので、これを頼んでいるので、私は考えています:分子として「正確な」浮動小数点数を使って1024で割ると、指数だけシフトします'正確な'フロート。
例をお願いしました。実際の問題はこれです。私は時々同じ入力に対して0.02999994、場合によっては0.03000000を生成するシミュレータを持っています。私はこれらの数値を1024で乗算して、それらの2つの数値が同じである「整数」(正確な「浮動小数点数」)を得、次に1024で除算して「正確な」丸め浮動小数点数を得ることができると考えました。
私は十進数に変換して浮動小数点に変換できると言われましたが、この方法が有効かどうかを知りたいと思います。
興味深い質問!私も知りたいのですが。 – Msonic
いいえ、あなたの値が基数10から基数2に変換された後、可能な表現は1つだけです。 2の累乗で除算すると指数のみが調整されます。結果を基数10に戻して表示すると、あまりに多く表示すると異なるノイズ桁が生成されます。フロートの有効数字は6.5桁なので、必ずゴミを取り除いてください。 –
"本当の問題はこれです..." - これはあなたの質問になるはずです。おそらく、入力と実行された操作に関するいくつかの特質が必要です。理想的には、同じ入力に対して異なる出力を生成するサンプルコードの合理的な短いビットです。 –