問題タブ [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.

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

c# - 32 ビットおよび 64 ビット OS でのダブル バイト サイズ

アプリを 32 ビット環境と 64 ビット環境で実行すると、 2 倍のサイズに違いはありますか?

私が間違っていなければ、32 ビット環境の double は 0 の後に 16 桁を占めますが、64 ビット環境の double は 32 ビットを占めますよね?

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

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

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

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

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

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

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

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

c# - 浮動小数点の加算: 精度の低下の問題

要するにa+b、切り捨てによる精度の低下がゼロに向かうのではなく、ゼロから離れるように実行するにはどうすればよいでしょうか?

長い物語

セットのサンプル平均と分散を計算する目的で、長い一連の浮動小数点値の合計を計算しています。Var(X) = E(X 2 ) - E(X) 2であるため、すべての数値の実行中のカウント、これまでのすべての数値の合計、およびこれまでのすべての数値の 2 乗の合計を維持するだけで十分です。

ここまでは順調ですね。

ただし、 E(X 2 ) > E(X) 2であることが絶対に必要であり、浮動小数点の精度が原因で常にそうとは限りません。疑似コードでは、問題は次のとおりです。

変数シーケンスの場合、これは大きな問題ではありません。分散をわずかに過小評価することになりますが、多くの場合、大きな問題にはなりません。ただし、ゼロ以外の平均値を持つ定数またはほぼ定数のセットの場合、 E(X 2 ) < E(X) 2を意味する可能性があり、その結果、計算された分散が負になり、コードを消費するという期待に反します。

今、私は魅力的なソリューションではないカハン総和について知っています。第一に、コードが最適化の気まぐれの影響を受けやすくなります (最適化フラグに応じて、コードはこの問題を示す場合と示さない場合があります)。第二に、問題は実際には精度によるものではありません。これで十分です。ゼロに向かってエラー。行を実行できれば

sqrVal が sumOfSquares の精度に丸められるのではなく、切り上げられるようにするには、数値的に妥当な解決策が必要です。しかし、どうすればそれを達成できますか?

編集:完成した質問 - タグフィールドのドロップダウンリストでEnterキーを押すと、とにかく質問が送信されるのはなぜですか?

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

mips - multu を使用して float を乗算している場合、LO レジスタの結果を無視する必要がありますか?

私たちのプロジェクトでは、ユーザーから 2 つの浮動小数点数を取得し、整数レジスタに格納して IEEE 754 単精度浮動小数点数として扱い、マスキングによってビットを操作します。23 ビットの小数部の値を乗算した後、積として単精度浮動小数点数 (32 ビット) を返したい場合、LO レジスタに配置された結果を考慮する必要がありますか?

0 投票する
6 に答える
38921 参照

javascript - JavaScriptで誤って丸められた多数

このコードを参照してください:

Firefox 3.5でコンソールを見ると、の値はjsonParsed四捨五入された数値です。

異なる値を試しましたが、同じ結果になりました(数値は四捨五入されています)。

また、丸め規則もありません。714341252076979136は714341252076979200に丸められますが、714341252076979135は714341252076979100に丸められます。

なぜこうなった?

0 投票する
10 に答える
132987 参照

c# - Formatting doubles for output in C#

Running a quick experiment related to Is double Multiplication Broken in .NET? and reading a couple of articles on C# string formatting, I thought that this:

Would be the C# equivalent of this C code:

However the C# produces the output:

despite i showing up equal to the value 6.89999999999999946709 (rather than 6.9) in the debugger.

compared with C which shows the precision requested by the format:

What's going on?

( Microsoft .NET Framework Version 3.51 SP1 / Visual Studio C# 2008 Express Edition )


I have a background in numerical computing and experience implementing interval arithmetic - a technique for estimating errors due to the limits of precision in complicated numerical systems - on various platforms. To get the bounty, don't try and explain about the storage precision - in this case it's a difference of one ULP of a 64 bit double.

To get the bounty, I want to know how (or whether) .Net can format a double to the requested precision as visible in the C code.

0 投票する
6 に答える
3254 参照

ruby - ルビーの算術

なぜrubyのこのコードはではなく7.30 - 7.20を返すのですか?0.09999999999999960.10

7.30 - 7.16しかし、たとえば、私が書くなら、すべてが大丈夫だろう、私は得るだろう0.14

どのような問題があり、どうすれば解決できますか?

0 投票する
11 に答える
61579 参照

floating-point - IEEE754 NaN値に対してfalseを返すすべての比較の理由は何ですか?

NaN値の比較が他のすべての値と異なる動作をするのはなぜですか?つまり、一方または両方の値がNaNである演算子==、<=、> =、<、>とのすべての比較は、他のすべての値の動作とは異なり、falseを返します。

これにより数値計算が何らかの形で単純化されると思いますが、他の設計上の決定について詳細に説明しているKahanによるIEEE 754のステータスに関する講義ノートでも、明確に述べられた理由を見つけることができませんでした。

この逸脱した動作は、単純なデータ処理を行うときに問題を引き起こします。たとえば、Cプログラムの実数値フィールドでレコードのリストを並べ替える場合、NaNを最大要素として処理するための追加のコードを記述する必要があります。そうしないと、並べ替えアルゴリズムが混乱する可能性があります。

編集: これまでの答えはすべて、NaNを比較することは無意味であると主張しています。

私は同意しますが、それは正解が間違っていることを意味するのではなく、幸いにも存在しないNot-a-Boolean(NaB)になります。

したがって、比較のためにtrueまたはfalseを返すという選択は、私の見解では恣意的であり、一般的なデータ処理では、データ構造を避けるために、通常の法則(==の再帰性、<、==、>の三分法)に従った場合に有利です。これらの法律に依存しているものは混乱します。

だから私は、哲学的な推論だけでなく、これらの法律を破ることのいくつかの具体的な利点を求めています。

編集2: NaNを最大にすることがなぜ悪い考えであるかを理解したと思います。それは、上限の計算を台無しにするでしょう。

NaN!= NaNは、次のようなループでの収束の検出を回避するために望ましい場合があります。

ただし、これは絶対差を小さな制限と比較することによって記述したほうがよいでしょう。したがって、私見では、これはNaNでの再帰性を破るための比較的弱い議論です。

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

javascript - IEEE-754 double の 16 進表現の文字列を JavaScript 数値変数に変換します

16 進数 "4072508200000000" があり、それが表す浮動小数点数 (293.03173828125000) を IEEE-754 double 形式で JavaScript 変数に入れたいとします。

マスキングと pow() の呼び出しを使用する方法を考えることができますが、より簡単な解決策はありますか?

クライアント側のソリューションが必要です。

これが役立つ場合があります。これは、IEEE-754 の 16 進エンコードを入力して、仮数と指数の分析を取得できる Web サイトです。

http://babbage.cs.qc.edu/IEEE-754/64bit.html

人々は常に「なぜ?」と尋ねる傾向があるため、ここにその理由を示します: Google のプロトコル バッファ (protobuf) の既存の不完全な実装に記入しようとしています。