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.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よりも精度が高いだろうという事になるのです
ありがとうございます。
どうも、色々わからないことがでてきたので、それだけで満足です。(^^;
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.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));
を実行して、終わるときにでてくるようです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
float型とdouble型の変数の違い...
-
関数へのポインタで
-
数値解シミュレーション
-
C# 引数の型 自由
-
C言語でintをdoubleに
-
コンパイルした時に表示されません
-
正規分布の乱数生成
-
浮動小数点の誤差のあわせ方
-
float と double
-
MATLABで画像のヒストグラムを...
-
「割り算」 と 「分数の掛け算」
-
C# 割合の記述について
-
C言語初心者 構造体 課題について
-
C言語の複素数についてです。
-
C言語のマクローリン展開ローラ...
-
2÷3などの余りについて
-
信頼区間の1.96や1.65ってどこ...
-
std::set<int> で、ある値が何...
-
「Aに対するBの割合」と「Aに対...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
doubleの変数にintとintの割り...
-
c言語で、繰り返し文の中で、0....
-
C 開放してるのにエラー(doubl...
-
C言語を実行すると-infが出てき...
-
float型とdouble型の変数の違い...
-
至急です! マクロ定義で #defi...
-
C言語の型による処理速度の違い
-
関数におけるif文とreturn文に...
-
C言語 関数プロトタイプ宣言の...
-
浮動小数点の定数
-
int とdoubleの比較
-
doubleは常に%lfとするべきなのか
-
difftime()について
-
C言語でdouble型の小数点の引き...
-
たくさんの数の平均を求める方...
-
斜辺と角度て底辺と高さを出したい
-
C言語で台形公式を使った二重積...
-
float?数字の後にLがつくもの
-
listに構造体を格納
おすすめ情報