問題タブ [floating-point-precision]

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.

0 投票する
5 に答える
2320 参照

c++ - coutはどういうわけか変数を変更できますか?

だから私はこのような関数を持っています:

ある時点で、この関数はオーバーフローし、非常に大きな負の値を返します。これが発生している場所を正確に追跡するために、関数が次のようになるようにcoutステートメントを追加しました。

そしてそれはうまくいきました!もちろん、ダブルを使って問題を完全に解決しました。しかし、私がそれを吐いたときに、なぜ関数が正しく機能したのかについて興味があります。これは典型的なものですか、それとも私が見逃しているバグがどこかにある可能性がありますか?

(助けになる場合は、floatに格納される値は単なる整数値であり、特に大きな値ではありません。キャストを避けるために、floatに入れるだけです。)

0 投票する
7 に答える
3762 参照

double - 次に高い/低い IEEE 倍精度数

高精度の科学計算を行っています。さまざまな効果の最適な表現を探す中で、次に高い (または低い) 倍精度数を取得したい理由を考え続けています。基本的に、私がやりたいことは、double の内部表現の最下位ビットに 1 を追加することです。

問題は、IEEE 形式が完全に統一されていないことです。低レベルのコードを使用し、実際に最下位ビットに 1 を追加すると、結果の形式は次に利用可能な double ではない可能性があります。たとえば、PositiveInfinity や NaN などの特殊なケースの数値である可能性があります。私が理解しているとは言いませんが、「通常の」パターンとは異なる特定のビットパターンを持っているように見えるサブノーマル値もあります。

「イプシロン」値が利用可能ですが、その定義を理解したことがありません。double 値は等間隔ではないため、1 つの値を double に加算して次に高い値にすることはできません。

なぜIEEEが次の高い値または低い値を取得する関数を指定していないのか、私には本当にわかりません。それを必要としているのは私だけではありません。

次の値を取得する方法はありますか (小さな値を追加しようとするある種のループなしで)。

0 投票する
4 に答える
955 参照

python - オイラー#26、より良い精度で有理数を文字列に変換する方法は?

より正確に取得したいのです1/7が、切り捨てられました。有理数を変換するときに、どうすれば精度を上げることができますか?

0 投票する
2 に答える
301 参照

c - 浮動小数点数との混同

出力:

しかし、書き込みの場合、x=3.1234e2出力はであり、出力はです。312.339996x=3.12345678e2312.345673

なぜこのような出力なのですか?私x=3.1234e2が出力を書くなら、そうあるべきだと思います312.340000が、実際の出力は312.339996GCCコンパイラを使用しています。

0 投票する
4 に答える
1934 参照

php - 最大は何ですか。フロートに表示する必要がある小数の量は? (PHP)

いまだに正確な結果が得られません。最大は何ですか。できるだけ正確にしたい場合、表示する必要がある小数の量は?

いくつかのコード (コピーして貼り付けてテストする準備ができています):

答えは 4 だと推測する必要がありますか ??? しかし、コメントのある行にはまだ問題があります

編集:誰も私のテストを理解していないと思います。フロートが不正確であることは知っています。しかし、一方は 1 != 0.98990123 であり、もう一方は 1 != 0.0000 です。bc* 関数の精度として 4 を設定すると、0.0000 ではなく、少なくとも 0.9899 (完全な答えが 1 の場合) になると予想されます。1つは「無限の精度に対して完全に正確ではない」ことであり、もう1つは「まったく役に立たない」ことです。

編集2:@Michael Borgwardtには解決策があります

0 投票する
1 に答える
10359 参照

objective-c - Objective-CFloat/倍精度

float私はiPhoneアプリケーションで使用するためにsとdoublesを保存することをいじっていNSUserDefaultsましたが、精度がどのように機能するか、そしてそれがどのように機能するかについていくつかの矛盾に遭遇しました。

これは私が考えたとおりに機能します。

ただし、これはそうではありません。

これはGHUnitが私に与える出力です:

しかし、最初にダブルをにキャストしてから、にキャストするfloatと、double必ず機能します。

私は、末尾に「f」を付けずに入力された数字はすでにdoublesと見なされていると想定していました。これは間違っていますか?もしそうなら、なぜにキャストしてからfloat正しくdouble機能するのですか?

0 投票する
3 に答える
15672 参照

python - 変数から浮動小数点数の精度を指定する方法は?

関数を作成したい次の単純なコードを数回繰り返しています。

この関数を呼び出すことができるようにしたい:def printStr(precision)
上記のコードを実行tabStrvalprecision小数点に戻ります。

例: for inprintStr(3)
を返します。63.457valtabStr

この種の機能を実現する方法はありますか?

0 投票する
7 に答える
2059 参照

c++ - 浮動小数点の丸めの問題を解決する C++

科学的応用 (細胞核内を移動する染色体のシミュレーション) を開発しています。染色体は、4x4 回転行列を使用してランダムな軸を中心に回転する小さな断片に分割されます。

問題は、シミュレーションが数千億回の回転を実行するため、浮動小数点の丸め誤差が積み重なって指数関数的に大きくなるため、時間の経過とともにフラグメントが「浮動」して染色体の残りの部分から切り離される傾向があることです。

C++ で倍精度を使用します。ソフトは今のところ CPU で実行されますが、CUDA に移植され、シミュレーションは最大で 1 か月持続します。

すべてのフラグメントが連鎖しているため(二重リンクリストとして表示できます)、どうにかして染色体を再正規化する方法はわかりませんが、可能であればそれが最善のアイデアだと思います。

何か提案はありますか ?少し損した気分です。

どうもありがとうございました、

H.

編集: 簡略化されたサンプル コードを追加しました。すべての行列演算は古典的な実装であると想定できます。

0 投票する
1 に答える
490 参照

floating-point - 浮動小数点計算モデルの選択

私の質問は主に科学的計算に関するものですが、一般的に質問しています。コンパイラで実際にfpモデルをどのように選択しますか?たとえば、Intelには、正確、厳密、高速、拡張、ソース、ダブルなどがあります。