C言語でdoubleの有効桁数はいくつでしょうか。
また、例として、5桁まで表現できるとしたら、3.1415となるのでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
0
ベストアンサー
下記を実行してください。
C
1#include <stdio.h> 2#include <float.h> 3 4int main (void) { 5 printf("doubleの有効桁数は10進換算で、%d桁です。\n",DBL_DIG); 6 printf("ただし実際には、%d進数%d桁なので、\n",FLT_RADIX,DBL_MANT_DIG); 7 printf("あくまで10進換算でということです。\n"); 8 printf("全ての10進%d桁の数値を正確に表現できるわけではないです。\n",DBL_DIG); 9}
投稿2020/02/04 02:30
総合スコア85901
0
C言語でdoubleの有効桁数はいくつでしょうか。
規格上は決まっていません。コンパイラやマシン環境によって異なります。
とはいえ、x86やx64のパソコン環境では、ほぼ確実に「IEEE 754の倍精度」(仮数部53ビット相当≒10進法で16桁弱)が使われます。
5桁まで表現できるとしたら、3.1415となるのでしょうか。
IEEE 754の倍精度の場合、小数点以下も2進法で表されますので、丸めて表示しないと「0.1」だと思っていた値は実は「0.1000000000000000055511151231257827021181583404541015625」として処理されている、ということになります(厳密に0.1を表現することはできません)。
投稿2020/02/04 01:14
総合スコア146018
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
コンピュータの小数点計算は留意が必要です
単純に0.1を10回ループさせても1にはなりません。
これは、maisumakunが書かれているように小数点を2進で表す事ができず
循環小数となって表現できないからです。
小数点でも、2進数で表現できる数値もありますがまれです。
参考
投稿2020/02/04 01:57
編集2020/02/04 02:03総合スコア1015
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ありがとうございます。
投稿2022/01/27 13:23
総合スコア56
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。