問題タブ [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++ - double を使用して同じ出力を生成する 2 つのプログラムがある場合、両方のプログラムが同一であると仮定できますか?
私は C++ プログラムを書いていますが、バグを修正するために、メイン プログラムのセクションを別のファイルに分離しました。メイン プログラムをProg1と呼び、別のセクションをProg2と呼びます。
Prog2 のバグを見つけて修正することに成功し、変更を Prog1 にコピーしました。すべてを実行すると、2 つのプログラムは同じ結果IFFを出力します。両方のプログラムで使用している唯一のデータ型は typedouble
です。
精度を上げるためにすべての double を に変更したいと思ってlong double
いましたが、そうすると、Prog1 の出力は Prog2 とは少し異なります。
私の考えでは、Prog1 では long double を使用する特定の計算が行われるのに対し、Prog2 ではリテラルのみを使用することがあるため、これはプロモーションの問題であると考えています。例えば:
プログラム 1:
プログラム 2:
value1
との結果value2
が正確に等しくならない場合 (参照:浮動小数点演算は壊れていますか? )。
これで、両方のプログラムのすべてのリテラルをタイプlong double
(例: 1.0L
) に変更して、出力が一致するかどうかを確認できますが、残念ながら、それは言うよりも簡単です (多くのがあります)。
だから私の質問は:
double を使用すると 2 つのプログラムの出力が正確に一致するため、Prog2 が正しく機能している場合、Prog1 が正しく機能していると想定しても安全ですか? long double を使用すると結果は異なりますが?
python - Python: float80 値の読み取り
10 バイト (80 ビット) のリトル エンディアン float 値 (またはfloat80
) の配列があります。Python 3でこの値を読み取るにはどうすればよいですか?
パッケージstruct
はサポートしていませんfloat80
(不注意にドキュメントを読んでいる可能性があります)。
パッケージarray
"struct" と同じパッケージは をサポートしていませんfloat80
。
パッケージは、またはタイプnumpy
をサポートします。とても良いのですが、の末尾に追加して拡張したり、醜いです。このパッケージのインポートには多くの時間がかかります。float128
float96
\x00
float80
float96
float128
パッケージctypes
はc_longdouble
. それはnumpyよりも何倍も高速sizeof(c_longdouble)
ですが、マシンに依存し、80ビット未満になる可能性があり、\x00
末尾に追加しfloat80
て拡張するのc_longdouble
も醜いです。
更新 1 : 私のgist.githubでコードをテストします。機能decode_str64
は醜いですが、機能します。今、私は正しい方法を探しています
c++ - C++ fabs(long double) コンパイラの警告
の絶対値が欲しいlong double
。
<cmath>
またはによると<math.h>
、以下が利用可能です。
ただし、実行するlong double ld = fabs(static_cast<long double>(0));
と、次の警告が表示されます (LLVM 7.1):
Absolute value function 'fabs' given an argument of type 'long double' but has parameter of type 'double' which may cause truncation of value
どうして?
a の絶対値を取得する他の方法はありますlong double
か?
編集:
std::abs
最終的に仕事をしました。しかし、std::fabs
しませんでした。コメントで指摘されたように、これは非準拠の実装が原因である可能性があります。
c - C - long double の最小値と最大値
long double の最小値と最大値は double のようなものですか? それらは互いに 8 バイトを使用し、最大で約 E308 (10^308) になります。long double は 16 バイトを使用し、>E4000 に到達する必要がありますね。それともコンピュータに依存しますか?これらの値は、マクロ LDBL_MAX と sizeof キーワード (バイト占有用) を使用してチェックします。それは正常ですか、それともいくつかのエラーを犯しましたか (フォーマット指定子のように - %Le を使用して印刷します)? ああ、Visual Studio 2015 を使用してコンパイルおよび実行しました。ありがとうございました!
c - C で LDBL_MAX/MIN を定義する
私は C で作業しています。 と の値を出力する必要がある演習を行う必要がlong double min
ありlong double max
ます。
ヘッダーとして使用float.h
しましたが、これら 2 つのマクロ ( LDBL_MIN/MAX
) は、単なる double であるかのように同じ値を返します。
LDBL MIN
Visual Studio 2015 を使用しています。マウスをその上に置くと、#define LDBL_MIN DBL_MIN
. dbl_min
それが代わりに印刷される理由ldbl_min
ですか?
この問題を解決するにはどうすればよいですか?
私の割り当てには と に 2 つの異なる値が必要なため、これは問題LDBL
ですDBL
。
c++ - C++ でユーザー入力に long double リテラル サフィックスを追加する
long double ベクトルを持つクラスがあります。
入力演算子をオーバーロードし、ユーザーから入力を取得してからベクターにプッシュしました。私が抱えている問題は、ユーザーが double の範囲外の数値を入力した場合、コードは、ユーザーが持っていなくても、入力に長い double 接尾辞を追加する必要があることです。これは私がこれまでに試したことです:
scanf を使用することを考えましたが、入力演算子をオーバーロードするときに安全に使用できるかどうかはわかりません。
c++ - C++ の非常に小さい浮動小数点数、精度
10^-15 から 10^-25 の非常に少数のオーダーを使用するコードを扱っています。double
andを使ってみたのですlong double
が、0.000000000000000000001
が四捨五入され0
たり、 のような数字0.00000000000000002
が0.00000000000000001999999999999
1/1000000 のわずかな部分でも、最終的な回答に大きな違いが生じるため、適切な修正はありますか?
予想される出力は次のようになります。
しかし、私が得る出力は次のとおりです。
double
、long double
さらにを試しboost_dec_float
ましたが、得られる出力は似ています。