No.4ベストアンサー
- 回答日時:
long doubleのときは、eの代わりにLeを使います。
long doubleがサポートされていたとしても、精度はまちまちです。doubleと全く同じ場合もあるでしょうし、80ビットや128ビットであることもあります。
printf("%d, %d\n", sizeof(double), sizeof(long double));
のように確認してみれば、使う意味があるかどうかはわかります。
doubleの精度は15桁なので、微妙なところですね。
ご返答ありがとうございます。
VC++でやってみたところ、両方とも8でした。
ただ、LINUX付きのCコンパイラでやってみたところ、8,12とでました。
こっちは、12桁まではOKということなのでしょうね。
ちなみに実行してみたところ、エラーでましたが、これはいったい…
No.5
- 回答日時:
>こっちは、12桁まではOKということなのでしょうね。
ご存知だとは思いますが、この場合の12はcharの12倍の大きさということです。
おそらくCPUはIA32(x86)だと思うのですが、80bitの拡張精度をアラインメントの問題で、10バイトではなく12バイトにしているという事です。
この場合、long double の仮数部は64bitで、精度19桁です。
>エラーでましたが、これはいったい…
printf("%.16Le", A) が実行時にエラーを出すって事ですよね?
printfが%Lfとか%Leをサポートしていないのなら諦めるしかないかもしれません。
ご返答ありがとうございます。
エラーは、
printf("%d, %d\n", sizeof(double), sizeof(long double));
を実行して、終わるときにでてくるようです。
No.6
- 回答日時:
勘違いされているところがあるようなので。
>ただ、LINUX付きのCコンパイラでやってみたところ、8,12とでました。
>こっちは、12桁まではOKということなのでしょうね
一般的に計算機では、実数は浮動小数点形式で扱います。
浮動小数点形式では、数値を (仮数部)×(底)^(指数部) の形式に変換します。
底は 2 に固定なので、仮数部と指数部で表現できることになります。
例えば、10 は 2 進数であらわすと、1010 になります。
これを浮動小数点形式であらわすと、
1.01×10(10進数だと2)^11(10進数だと3)になります。
10 は 仮数部 1.01 指数部 11 ということです。
で、sizeof(double) が 8 ということは、
実数を8バイト(=64ビット)で表現するということです。
要するに、64ビットで仮数部と指数部をあらわすということです。
仮数部と指数部がそれぞれ何ビット割り当てるかはシステム次第です。
こちらでは、基本的に仮数部 53ビット、指数部 11ビットのようです。
2進数で53桁の精度があります。
これを10進数に直すと log10(2^53)が約16なので、
精度は16桁ということになります。
ということで、精度とsizeofの結果とは直接関係はありません。
No.7
- 回答日時:
>結局、sizeofの結果はあまり意味がなかったのでしょうか。
sizeofは変数または型が何バイトのメモリを使用するのかがわかるだけです。
なので、sizeof(long double) > sizeof(double)であるならば、long doubleはdoubleよりも精度が高いだろうという事になるのですが、cherry_moonさんが言っているように、実際の精度を意味するわけではありません。
doubleの精度ですが、log10(2^53)は15.95くらいです。個人的には16に満たないものを16と言いたくないので15桁としていますが、どちらでも問題ないと思います。
>printf("%d, %d\n", sizeof(double), sizeof(long double));
>を実行して、終わるときにでてくるようです。
うーむ、なぜこれがエラーになるのかわかりません。
もし、long doubleが必要という事ではなく、16桁表示がしたいだけなのでしたら、doubleを使われるのがトラブルがないかなと思います。
>sizeofは変数または型が何バイトのメモリを使用するのかがわかるだけです。
>なので、sizeof(long double) > sizeof(double)であるならば、long double
>はdoubleよりも精度が高いだろうという事になるのです
ありがとうございます。
どうも、色々わからないことがでてきたので、それだけで満足です。(^^;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- C言語・C++・C# C言語のマクローリン展開ローラン展開のコードについて 3 2022/12/15 14:45
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
float型とdouble型の変数の違い...
-
doubleの変数にintとintの割り...
-
C言語 関数プロトタイプ宣言の...
-
C言語の型による処理速度の違い
-
int とdoubleの比較
-
EXE1→DLL→EXE2数値を受け渡す方法
-
Cで3乗根を求める方法
-
C言語初心者 構造体 課題について
-
至急です! マクロ定義で #defi...
-
c言語でユーザ関数を利用して複...
-
mallocで動的確保後、値が変わる
-
インデックスが配列の境界外です.
-
関数におけるif文とreturn文に...
-
listに構造体を格納
-
C言語 入力した数値の平均値の...
-
ある線が円の範囲に入っている...
-
C言語を実行すると-infが出てき...
-
c言語のpow関数を使った戻り値...
-
浮動小数点数が表示されないん...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
至急です! マクロ定義で #defi...
-
C 開放してるのにエラー(doubl...
-
doubleの変数にintとintの割り...
-
C言語の型による処理速度の違い
-
関数におけるif文とreturn文に...
-
float型とdouble型の変数の違い...
-
int とdoubleの比較
-
C言語 関数プロトタイプ宣言の...
-
C言語を実行すると-infが出てき...
-
C言語初心者 構造体 課題について
-
2次方程式の解を求めるプログ...
-
c言語で、繰り返し文の中で、0....
-
3次方程式の求解プログラム(...
-
指数形式で入力するには
-
線形補間
-
浮動小数点の誤差のあわせ方
-
浮動小数点の定数
-
浮動小数点数が表示されないん...
-
たくさんの数の平均を求める方...
おすすめ情報