ここから本文です

プログラミングで半径を入力し円の面積、球の体積、球の表面積の3つを出力すると...

nat********さん

2014/5/1210:26:42

プログラミングで半径を入力し円の面積、球の体積、球の表面積の3つを出力するというプログラムを作りたいのですが、以下のようなプログラムで出力するといちばん小さい桁があいません。

どのように変えればきれいな表示になるでしょうか?

#include <stdio.h>
#define p 3.141592
int main()
{
double h, e, k, hy;
printf("半径を入力してください\n");
scanf("%lf", &h);
e = h*h*p;
k = 4*p*h*h*h/3;
hy = 4*p*h*h;
printf("円の面積は%5.3fです\n", e);
printf("球の体積は%5.3fです\n", k);
printf("球の表面積は%5.3fです\n", hy);
return 0;
}

閲覧数:
499
回答数:
2
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

hhy********さん

2014/5/1623:58:34

k032yfさんのおっしゃる通りで、

C言語では、
「4」と「4.0」は違います
「3」と「3.0」も違います

なにが違うのかというと、、、

コンピュータはデータを2進数で保存するわけですが、整数の場合、それをそのまま2進数に直して保存します。
しかし、「4.0」の「.」を2進数で表現することはできません。なので浮動小数点という方法でデータを保存します。
つまり、コンピュータの中では、整数と少数では、データの扱い(フォーマット)が全く異なります。

よって、「4」と「4.0」などは区別されるのです



そして、最下位の桁が正しくない理由も、コンピュータのデータの保存方法にあります。

コンピュータがデータを保存するには、10進数を2進数に直さなければならないと書きましたが、
10進数の小数を2進数に直そうとすると、10進数では有限小数なのに、2進数では循環小数になるものがあります
コンピュータは無限にデータを保存できないので、循環小数をどこかで切り捨てなければなりません。それが誤差になります

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

k03********さん

2014/5/1210:46:49

natsu12382さん

1.
4と4.0は違う。

k = 4.0*p*h*h*h/3.0;
hy = 4.0*p*h*h;

2.
いちばん小さい桁があいません。
2進数と10進数の誤差もあります。

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる