
ある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ランキング
-
PS4コントローラーをPCでゲーム...
-
Microsoft365で作ったword文書...
-
4Kの外部モニターに出力すると...
-
プログラムについての質問です...
-
VBAで有効数字の設定
-
cout と cerrの違い
-
KEYENCEのシーケンスプログラム...
-
ACCESSからExcelへエクスポート...
-
シェルスクリプト初心者です。#...
-
Accessのテーブルからcsv出力す...
-
ListViewの複数選択について
-
ACCESS クエリ→フォーム...
-
PD充電器について
-
VBAでテキスト出力時のスペース...
-
リストボックスの内容を テキ...
-
【VBA】PDFを2in1で出力したいです
-
VBAのExecメソッドで画面を非表...
-
TV出力ポートをOFFにすれば良い...
-
gnuplotで複数のwindowを開くに...
-
真空管 300 B の前段について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
4Kの外部モニターに出力すると...
-
プログラムについての質問です...
-
Accessのテーブルからcsv出力す...
-
FLEXSOLARパネルからAmazonで買...
-
真空管 300 B の前段について
-
cout と cerrの違い
-
printfとputcharの違いは
-
スマホ充電器購入にあたり
-
PD充電器について
-
TV出力ポートをOFFにすれば良い...
-
COBOLのMOVEで桁数が異なる場合
-
Windows Formアプリからコンソ...
-
CrystalReportの文字列の折返し...
-
C#でアクセス権限の取得方法が...
-
coutで出力した文字を消去する...
-
【UWSC】WEBページ中の特定文字...
-
KEYENCEのシーケンスプログラム...
-
CRC16計算について
-
標準出力の上書き
おすすめ情報
2の結果を見る限り正確な四捨五入ではないように思いますが「正確に」という質問に対して正解を出しています。
その辺を説明お願いします