問題タブ [long-double]

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 投票する
2 に答える
39818 参照

c++ - C++でのlong doubleの精度は?

long double特定のプラットフォームでの精度を調べる方法を知っている人はいますか? を使用した場合と同じように、10 進数で 17 桁を超えると精度が低下しているようdoubleです。double私のプラットフォームでは 8 バイトで表されるのに対し、long doubleは 12 バイトで表されるため、さらに取得することが期待されます。

あなたが尋ねる前に、これは Project Euler のためのものなので、はい、17 桁以上が必要です:)

編集:素早い返信ありがとうございます。私のシステムで を使用して、10 進数で 18 桁しか取得できないことを確認しlong doubleました。

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

floating-point - 80 ビットの拡張精度データ型のアプリケーションと利点は何ですか?

ええ、私は80-bitと言うつもりでした。あれはタイプミスじゃない…

私の浮動小数点変数の経験では、single (32 ビット)、double (64 ビット)、long double (96 ビットまたは 128 ビットと呼ばれる) などの 4 バイトの倍数が常に関係していました。そのため、 AIFF (Audio Interchange File Format) ファイルを読み書きするコードを作成しているときに、 80 ビットの拡張精度データ型に遭遇したとき、少し混乱しました。サンプリングを格納するために拡張精度変数が選択されました。オーディオトラックのレート。

ウィキペディアをざっと見てみると、 IEEE 754-1985 標準の概要に 80 ビット形式の簡単な言及と共に上記のリンクが見つかりました(ただし、IEEE 754-2008 標準の概要にはありません)。特定のアーキテクチャでは、「extended」と「long double」は同義語のようです。

私が遭遇していないことの 1 つは、拡張精度データ型 (もちろん、AIFF ファイルのサンプリング レートを除く) を利用する特定のアプリケーションです。これにより、私は疑問に思いました:

  • 一部のプログラミングアプリケーションで拡張精度が必要/有益である状況に遭遇した人はいますか?
  • 明らかな「double よりも精度が高いが、long double のほとんどの実装よりもバイト数が少ない」以外に、80 ビット浮動小数点数の利点は何ですか?
  • その適用性は薄れていますか?
0 投票する
2 に答える
3231 参照

c++ - long double 出力の精度が正しくありません。何が間違っている可能性がありますか?

long doubleconst または not-const として設定している定数があります。long doubleこれは、テスト ワークステーションの精度 (19 桁) よりも長い (40 桁) です。

印刷すると、精度が 19 桁ではなく 16 桁で表示されます。

私がテストしているコードは次のとおりです。

コンパイル:

出力:

私は期待し0.6931471805599453094ますが、代わりに取得し0.6931471805599452862ます。

精度の 19 桁が 16 桁にカットされる理由はありますか?

ここに私の環境があります:

gcc の他のバージョンでも同じ問題が発生しています。

NTL や他のライブラリを調べることはできますが、何が原因なのか知りたいです。あなたの洞察に感謝します。

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

c - C のロングダブル

私はC Primer Plusの本を読んでいて、この例にたどり着きました

Macbook でこれを実行した後、次の出力に非常にショックを受けました。

そこで、よく調べてみると、long double を表示する正しい形式は を使用することであることがわかりました%Lfただし、 CygwinUbuntu、およびiDenebabet実行したときに取得した値ではなく、 double 値を取得した理由をまだ理解できません。

何か案は?

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

c++ - 実際の長倍精度は std::numeric_limits と一致しません

i686-apple-darwin10-g++-4.2.1 を使用して Mac OS X 10.6.2、Intel で作業し、-arch x86_64 フラグを使用してコンパイルしていると、...

...予想どおり、long double が実際に 308 を超える指数の値に設定されると、inf になります。つまり、実際には 80 ビットではなく 64 ビットの精度しかありません。

また、sizeof()long double が 16 バイトであることを示しています。

最後に、 using<limits.h>と同じ結果が得られ<limits>ます。

不一致がどこにあるのか誰か知っていますか?

与える

4932
1e+308 inf
16

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

file - バイナリ ファイルの印刷と必要な精度

プロットのためにMatlabまたはGNUPlotにインポートできるように、浮動小数点数を含む1次元配列であるz1という変数をテキストファイルに出力しています。バイナリ ファイル (.dat) は .txt ファイルより小さいと聞いたことがあります。.txt ファイルへの出力に現在使用している定義は次のとおりです。

3 つの質問があります。

  1. バイナリ ファイルはテキスト ファイルよりも本当にコンパクトですか?;

  2. はいの場合、配列 z1 の値をバイナリ ファイルに出力できるように、上記のコードを変更する方法を知りたいです。fprintf を fwrite に置き換える必要があることを読みました。私の出力ファイルには、dodo.dat には配列 z1 の値が含まれ、1 行に 1 つの浮動小数点数が含まれている必要があると書かれています。

  3. 私のコードには %.16Le が含まれていますが、長い倍精度で 15 桁の精度があるため、%.15Le は正しいと思います。幅の位置にドット (.) を入れました。これにより、任意のフィールドに拡張して目的の数値を保持できると考えています。私は正しいですか?%.16Le の例として、1.0047914240730432e-002 のような出力を得ることができます。これにより、16 桁の精度が得られ、フィールドの幅は数値を正しく表示するのに適切な幅になります。幅の値ではなく、幅の位置にドット (.) を配置することをお勧めしますか?

どうもありがとう...

更新は次のように変更されています:

「wb+」への変更に加えて、よろしいですか?Matlab でバイナリ ファイルを読み取ることができません。

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

c++ - x86-64 long 倍精度

Intel 64 ビット プラットフォームでの long double の実際の精度は? 128または実際の128ビットにパディングされた80ビットですか?

前者の場合、gmp を使用する以外に、真の 128 精度を達成するための別のオプションはありますか?

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

visual-c++ - MSVCで拡張精度float(80ビット)をdouble(64ビット)に変換します

MSVC win32 / win64で拡張精度float(80ビット値、long double一部のコンパイラーでも知られています)からdouble(64ビット)に変換するための最も移植性が高く「正しい」方法は何ですか?

long doubleMSVCは現在(2010年現在)それがdouble同義語であると想定しています。

おそらくインラインasmでfld/fstpアセンブラペアを記述できますが、MSVCのwin64コードではインラインasmを使用できません。このアセンブラコードを別の.asmファイルに移動する必要がありますか?それは本当にそうなので、良い解決策はありませんか?

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

c++ - ロングダブル対ダブル

使用しているシステムによって、さまざまなデータ型のサイズが変わる可能性があることを知っています。

私はXP 32ビットを使用しており、C++で演算子を使用すると、12バイトで8バイトのsizeof()ようです.long doubledouble

ただし、ほとんどの主要な情報源は 8 バイトであると述べているlong doubleため、範囲はdouble.

どうして 12 バイトなのですか? long double12バイトだとすると、これも値の範囲が広がるのではないでしょうか?それとも、値が double の範囲を超え、したがって 8 バイトを超える場合にのみ、長い署名が使用されます (コンパイラの数値)。

0 投票する
8 に答える
276337 参照

c - printfとlongdouble

Windows上のNetbeansで最新のgccを使用しています。なぜ機能しないlong doubleのですか?printf指定子は間違っ%lfていますか?

コード:

出力: