
あるC言語の問題で答えを「小数第二位まで正確に 出力してください」とありました
他の正解を貰った回答者の解答を見ると
printf("%.2f\n", n);
と出力してprintfで小数点を調整してるだけでした。
(nの値はまだ四捨五入していない状態)
1
これは問題文の「正確に」に対して正しいものなのでしょうか?
2
自分でnに値を代入してやってみましたが
0.225を出力すると0.23で確かに四捨五入
0.125を出力すると0.12と切り捨てになります
これどういうものなのかも良くわかりません
この説明もお願いします
A 回答 (8件)
- 最新から表示
- 回答順に表示
No.8
- 回答日時:
0.125は浮動小数点で正確に誤差なく表せる数ですが
0.12となるのは偶数丸め(Nearest to Even)を採用しているからです。
C99で規定している標準の丸め方法のひとつ。
#丸め方法はC99では複数の方法から選べる
#規定値は決まって無かったと思うけど
#たいていは偶数丸め。
偶数丸め、銀行家の丸め などで検索してみましょう。
因みにC99では丸め方法として四捨五入は採用していません。
またJISでも四捨五入は非推奨、偶数丸めを推奨しています。
No.7
- 回答日時:
プログラムの世界では
「小数」が「正確」に表現できるとは限らない
というのが常識です.
それを前提にすると
そもそも「正確」とはどういうことですか?
という疑問が出てくるのは当然だと思いますよ.
ちなみに
round(n*100)/100
にしろ
(double)(int)(n*100+0.5) /100
にしろ, 負の数がからむといわゆる四捨五入にはならないことがありえますね. まあ「四捨五入ってなんだ」っていわれるとやっぱり困るんだけど.
No.6
- 回答日時:
整数型以外は全て誤差を含んでいると理解していいと思います。
「小数第二位まで正確に 出力してください」
というのであれば、1000倍して整数にして、下1桁を四捨五入するのではダメですか?
>0.125を出力すると0.12
代入した0.125を1000倍して125になっているか確認してみてください。
回答有り難うございます
round(n*100)/100
or
(double)(int)(n*100+0.5) /100(
こうすれば学校で習うところの小数点第3位の四捨五入が「正確」に出せ少数第2位が出ますよね?
まだ中学生なのでその辺よくわからないのですがプログラミングの世界では正確にというのは学校で習う正確とはちがうのですか
「正確」にで少し混乱してしまいました
No.5
- 回答日時:
#4 の補足要求に
4. どのようなプログラムで確かめたのですか
も入れておきましょうか.
ちなみに「小数第二位まで正確に 出力してください」自体に複数の解釈がありえるし, 仮に四捨五入としても複数の方法があるので
正確な意図を確認する
のが最も適切だと思いますよ. それが面倒なら
自分の解釈を示したうえでその解釈に対して適切なプログラムを示す
のもありえますが, その場合には
出題者の気分で「ダメ」とされても文句はいいにくい
ので注意が必要ですね.

No.4
- 回答日時:
>自分でnに値を代入してやってみましたが
>0.225を出力すると0.23で確かに四捨五入
>0.125を出力すると0.12と切り捨てになります。
補足要求です。
1.nの型はなんですか。doubleですかfloatですか。どちらでしょうか。
2.コンパイラは何でしょうか。gccですかvisual studioですか。それとも、なにか他のものでしょうか。
3.OSはwindowsですか。それともlinuxですか。
No.3
- 回答日時:
>言葉遊びのレベルということ?
いや、言葉遊びではないですけど
>意味がわからないような問題では問題として意味をなさなくないですか?
はい、だからこの問題を出されたら私はまず
「正確に」とはどういう意味ですか?と質問しますね
No.2
- 回答日時:
>これは問題文の「正確に」に対して正しいものなのでしょうか?
「正確に」の定義が少数第二位以降の数字を絶対に表示せずに
という意味なら正しいのでは
問題文だけでは「正確に」というのが何を示しているのかがわからないです
>これどういうものなのかも良くわかりません
https://www.cc.kyoto-su.ac.jp/~yamada/programmin …
非常にややこしい部分の話しです
詳しいことは「浮動小数点」「丸め誤差」など
ご自身で検索して調べたほうが良いと思います
とりあえずイメージしやすいように
分かりやすいように以下のURLの実行結果を見てください
https://wandbox.org/permlink/mATyXJ7zti5HJ4wV
0.225という数字をコンピュータでは正確に表すことができないことがわかると思います
コレが精度の問題です
>「正確に」の定義が少数第二位以降の数字を絶対に表示せずにという意味なら正しいのでは
>問題文だけでは「正確に」というのが何を示しているのかがわからないです
え?
言葉遊びのレベルということ?
意味がわからないような問題では問題として意味をなさなくないですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
負の数の四捨五入の方法
C言語・C++・C#
-
複数桁10進数の*桁目だけを抽出したい
C言語・C++・C#
-
数字列を3桁ごとにカンマで区切る方法
C言語・C++・C#
-
4
小数点切捨て表示
C言語・C++・C#
-
5
printf による16進表示について
C言語・C++・C#
-
6
10個出力で改行したいのですが・・・
C言語・C++・C#
-
7
数字の位ごとの値を表示するプログラム
C言語・C++・C#
-
8
四捨五入をするプログラムの書き方を教えてください
C言語・C++・C#
-
9
エラーの意味は? Lvalue required
C言語・C++・C#
-
10
構造体のメンバをfor文で回したい
C言語・C++・C#
-
11
負の整数における小数点以下の切り上げと切り捨て方法
数学
-
12
3桁区切(コンマ)記号をつける方法
C言語・C++・C#
-
13
C言語のポインターに関する警告
C言語・C++・C#
-
14
数字以外が入力されたらエラー文を出したい。
C言語・C++・C#
-
15
e^(x^2)の積分に関して
数学
-
16
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
17
adobe readerスライドショーの自動再生
PDF
-
18
long doubleの表示方法
C言語・C++・C#
-
19
scanf が無視されます
C言語・C++・C#
-
20
scanf(%s", buf);でスペースを含んだ文字"
C言語・C++・C#
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
コンセントの電力は入力と出力...
-
5
VBAでテキスト出力時のスペース...
-
6
テキストファイルから特定の文...
-
7
VBAのExecメソッドで画面を非表...
-
8
printfとputcharの違いは
-
9
RS232cデーターをエクセルに落とす
-
10
HOCadの本についてなんですが・...
-
11
cout と cerrの違い
-
12
アクセスでエクセルに出力する...
-
13
ACCESSからExcelへエクスポート...
-
14
Excel から Accessクエリーを実...
-
15
Mac版 Excel VBA PDF出力フォル...
-
16
DictionaryのKeyに複数の値を使...
-
17
テキストファイルに文字装飾を...
-
18
無停電電源装置(UPS)の待機時...
-
19
ACアダプタの適合性・互換性に...
-
20
エンジンの出力問題
おすすめ情報
公式facebook
公式twitter
2の結果を見る限り正確な四捨五入ではないように思いますが「正確に」という質問に対して正解を出しています。
その辺を説明お願いします