問題タブ [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.
c++ - 18 桁を計算したいのですが、6 桁しか計算できませんか? long double を使用しても機能しません
Gregory Leibniz 式を使用して pi を推定するプログラムを作成しましたが、小数点以下 18 桁まで計算されません。小数点以下 5 桁までしか計算されません。助言がありますか?
c++ - acos(-1) に対する NetBeans の誤った出力
いくつかの異なる反復法で pi を計算し、それをpi = acos(static_cast<long double>(-1.0))
(long double として格納) によって計算された値と比較する割り当てがありました。何らかの理由で、NetBeans から-8.8796093704934495e+043
. 私の限られた知識によると、どこかに署名付き/未署名の不一致があるようです。C++11 標準を使用するようにコンパイラを設定しました。私は何が欠けていますか?
objective-c - double が int の場合にのみ同じ double を返しますか? (小数なし) Obj-C
が intfor-loop
かどうかを判断するためにa を使用しています。for ループが 2 から^1/2の間のlong double
別のループをループするように設定しました。は、基本的に 2 の 2-10 乗 - 1 である、私が設定したループです。次に、 が整数かどうかを確認しています。私の質問は、整数である値のみを取得するにはどうすればよいですか? 私の説明は少し混乱したかもしれないので、ここにループコード全体を示します。ところで、私はこれらの数を大幅に増やすことを計画しているので、ロングダブルを使用しています。long double
final
Final
final
final
visual-c++ - Visual C++ x86 ABI: VC++ はどのように値を返しますか?
では 1/2/4 バイトの整数が返されeax
、 では 8 バイトの整数が返されることはわかっていeax:edx
ます。
ところで、cdecl/stdcall で 4/8/16バイトの浮動小数点値(おそらくlong double
16 バイトだったと記憶しています..)はどのように返されるのでしょうか?
@MatteoItalia のおかげで、VC++long double
が 8 バイトであることを知りました。では、どうすれば 16 バイトの浮動小数点を使用できるでしょうか。
(「8 バイトだけを使用してください」とは言わないでください。本当に必要なのです。)
うーん、10バイトの浮動小数点でいいのかな…
c - データ構造のアラインメントとの混同?
コード 1:-
私のコンピューターでの出力:-
char
とのサイズはdouble
それぞれ '1' と '8' であるため、0028FF00
と0028FF08
はそれぞれ '1' と '8' の倍数です。
コード 2:-
出力は次のとおりです:-
char
とのサイズはlong double
それぞれ '1' と '12' ですが0028FF04
、'12' の倍数ではありません。
この場合、パディングが適用されないのはなぜですか?
c++ - long double - Windows と Unix で同じ精度を持つ代替手段は?
特定の日付形式 (Unix Time、HFS、Fat-Time、...) の特定の数値 (Dec、Bin、Hex) を人間が読める日付文字列に変換できるツールをプログラミングしています。日付と時刻を double 値で表す Windows OLE-Date に問題があります。これで、Windows と Unix で異なる出力が得られます。Outputdate の 2 番目の違いにすぎませんが、Windows と Unix プラットフォームで同じ出力を生成したいと考えています。値を格納するために long double を使用しています。Visual Studio C++ Compiler と gcc では long double に異なる精度が使用されることを知っています。両方のプラットフォームで同じ精度を使用する代替手段はありますか?
python - NumPy longdouble と SymPy 数値評価の混合 – 精度はどうですか?
NumPy 関数と longdouble を使用して計算の一部を実行し、SymPy シンボリック微分と数値評価を使用して計算の一部を実行し、(SymPy float に) 結合するコードがあります。Sympy の評価は任意の精度で実行できますが、十分な精度、つまり longdouble の結果を「汚染」しない精度はどれくらいでしょうか? float128
私の知る限り、私のシステムで呼び出されたにもかかわらず、NumPy longdouble は実際には 80 ビットの長さしかありません。ウィキペディアでは、80 ビットの精度について次のように述べています。
80 ビット形式の 10 進数と 2 進数間の変換の境界は、次のように指定できます。有効桁数が最大 18 桁の 10 進数文字列が、80 ビットの IEEE 754 バイナリ浮動小数点値に正しく丸められた場合 (入力時と同様)、変換されます。 (出力と同様に) 同じ数の有効な 10 進数に戻すと、最終的な文字列は元の文字列と正確に一致します。一方、逆に、80 ビットの IEEE 754 バイナリ浮動小数点値が正しく変換され、(最も近い) 少なくとも 21 桁の有効数字を持つ 10 進文字列に丸められた場合、元の値と完全に一致します。
さらに、インタラクティブなプロンプトを掘り下げます。
18
したがって、ウィキは、精度は数値が変換される方法 (または数字) に依存すると21
言い、Numpy は単に18
数字だと言います。興味深いことに、デフォルトの double の精度はデフォルトの SymPy 数値評価精度 ( 15
vs. 15
) と同じです。
ある時点で longdouble の結果を SymPy float に変換している (そして SymPy で作業している) と仮定すると、どの SymPy 精度を設定する必要がありますか? 18
数字?21
? もう少し?
Linux 64 ビット (Sandy Bridge) で Python 2.7、NumPy 1.6.2、SymPy 0.7.1.rc1 を使用しています。実際のコードはここにあります(nsk
130行目あたりのクラス)。
c - Cython で long double の使用を強制するにはどうすればよいですか?
C の知識が乏しいことを前もってお詫びします。Python を使用してコーディングし、標準 C 関数を使用して Cython でいくつかのモジュールを作成し、速度を大幅に向上させました。ただし、より高い範囲が必要です(はい、あなたはそれを正しく読んで1e308
います) 。double complex
cexp
cabs
cexpl
関数andを使用しようcabsl
とし、変数の型を と宣言しましたが、 のlong double complex
後でもオーバーフローが発生し1e308
ます。これはおそらく、私のコンパイラが long double を double に変換することを意味します。そうですか? しかしウィキペディアによると、
GNU C コンパイラを使用すると、型に使用される物理ストレージ (96 ビットまたは 128 ビットのいずれか) に関係なく、x86 プロセッサでは long double は 80 ビットの拡張精度になります。[4]
私は arch Linux (および問題があれば Python 2.7.8) で 64 ビット システムを使用しています。
long double の使用を強制する Cython モジュールを作成するにはどうすればよいですか? 私が行っている科学計算には、このような大きな数が必要です。
編集: フラグ -m128bit-long-double を指定してコンパイルすると、同じ結果が得られます。ここに示されているように、
x86-64 コンパイラでは、-m128bit-long-double がデフォルトの選択です。これは、その ABI が long double を 16 バイト境界に揃えることを指定しているためです。
したがって、これは違いはないようです。
また、次のプログラムを実行して、システムの範囲を確認しました。
そして、次の出力を得ました:
問題は私のコードにあると思いますが、そうですか?プログラムが実際に long double を使用するようにするために、変数を宣言する以外に追加する必要がある明示的な識別子はありますか?
python - numpy longdouble dtype を使用するにはどうすればよいですか?
np.longdouble
Python コードで dtype を操作しようとしています。NumPy を使用して、Cython でコンパイルされた C モジュールから取得した long double を操作しようとしています。
私がこれをするとします:
本質的に、それはこの質問と同じ問題にリンクされており、Python は最初1e+346
に をフロートに変換し、その表現はinf
. しかし、誰かが回避策を提案できますか? 最初に float に変換されない NumPy longdouble を作成する方法はありますか?
long double を出力できる C モジュールがあり、これを dtype の numpy 配列で使用したいと考えていますnp.longdouble
。
解決策に Python/NumPy の再コンパイルが含まれる場合でも、喜んで試します。