'/'をlong doubleで使用しますか?

私はなぜ、 '/'を使用して、次の方法でlong doubleを使用すると、0.000000の値になるのか理解しようとしていますが、同じコードはdoubleではありません

double d = (double)total_results/(double)total_points;

0.785403という値を与える

long double d = (long double)total_results/(long double)total_points;

値0.000000を指定します。私は 'total_results/total_points'の最も正確な値を取得しようとしています

編集:最終的にエラーは単に '%Lf'の代わりに '%f'を使用して出力していたということでした

printf("Running on %d thread(s), results is %f.\n", NUM_THREADS, d);    

printf("Running on %d thread(s), results is %Lf.\n", NUM_THREADS, d); 
6
それはC ++で私のために働く
追加された 著者 juergen d,
@Eregrith long double にキャストすると問題が発生する場合、 double にキャストするとさらに大きな問題が発生します。それはOKだと仮定しよう。 total_resultとtotal_pointsは数字です。
追加された 著者 Mr Lister,
なぜこれに7つのアップボントを受け取ったのですか?問題の原因となった行は質問にも含まれていないので、良い質問ではありません。 printf()行が含まれるように質問を編集してください。私はそれをupvoteします。
追加された 著者 Lundin,
total_resultsとtotal_pointのタイプは何ですか?それらを long double にキャストすると、アクセスした値が間違って変更されることがあります
追加された 著者 Eregrith,
どのプラットフォーム/コンパイラ?
追加された 著者 CharlesB,
Ernest Friedman-Hillの答えは、あなたの問題を示す最小限の作業プログラムを常に投稿することができなければならないことを示しています。
追加された 著者 Dan Fego,

1 答え

これは明らかに単なる推測ですが、どのように結果を出力していますか?間違ったフィールド指定子で printf を使用している場合は、間違ったゼロを印刷することは間違いありません。 g ++を使って、 "0.75"を得たときに "%lf"を試して "-2.0000"を得ました。右の指定子は "%Lf"で、大文字のLです。

15
追加された
@ MrLister:そのコメントは役に立ちません。 正しい回答が既に与えられているときに、何かを行うためにOPに間違った方法を教えるだけです。
追加された 著者 R..,
はい、%llf など、それも機能します。 (gcc 4.3、Linuxは少なくとも)
追加された 著者 Mr Lister,
@R .. %llf が間違っているのはなぜですか?私を啓発します!
追加された 著者 Mr Lister,
これは多くのコンパイラで動作しますが、GNU拡張であり、標準で L が宣言されています。しかたがない。私のすべてのプログラムを編集するにはオフ!
追加された 著者 Mr Lister,
@MrLister %llf long double を印刷するために使用できるという標準によって必須ではないため、標準では L 何か他のコンパイラで動作するかもしれませんが、移植性はありません。
追加された 著者 Daniel Fischer,
C11 7.21.6.1/7: ll(ell-ell)次のd、i、o、u、x、またはX変換指定子をlong long intまたはunsigned long long int引数に適用することを指定します。 / - / L次のa、A、e、E、f、F、g、またはGを指定します。変換指定子はlong double引数に適用されます。
追加された 著者 Lundin,
私が標準から投稿したものと互換性のないものは、使用すべきではないぎこちない非標準のgooです。 GCCの拡張は一般的に実動コードで使用すべきではありません。
追加された 著者 Lundin,
これが問題でした。私は '%f'を使っていました。ありがとうございました
追加された 著者 Shane,