[過去ログ] C言語なら俺に聞け 152 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
19
(4): デフォルトの名無しさん (オッペケ Sr8d-br4T) [] 2019/06/23(日) 10:44:43 ID:NJ0BedP7r(1/2) AAS
演算に関する質問です。
8.21 * 5 = 41.050000000004←この4は何者でしょうか?
左の「8.21」が浮動小数点数、右の「5」は整数です。
演算の結果、制限の少ない型、すなわち浮動小数点数に変換されるのですが、
上記結果に示すように最後の4が何?不具合?
C言語の歴史は長いのに、こういう初歩的なミスをどうして今の今まで気づかず、放置したんですか。
これを契機に俺は浮動小数点数は使わないことにした。
20
(2): デフォルトの名無しさん (ワッチョイ 4101-LvUn) [sage] 2019/06/23(日) 10:49:35 ID:swNRnu090(1/2) AAS
>>19
ネタか?
IEEE754を読んでこい。
28
(1): デフォルトの名無しさん (ワッチョイ 2b63-0BNU) [sage] 2019/06/23(日) 13:38:06 ID:6tta8QXL0(2/6) AAS
>>19
>8.21 * 5 = 41.050000000004←この4は何者でしょうか?

>8.21 * 5 = 41.050000000000004

コピペミスか?
48
(1): デフォルトの名無しさん (ワッチョイ db02-WXYe) [] 2019/06/24(月) 00:03:38 ID:JSF3ka2M0(1) AAS
>>19
普通はCは浮動小数点を内部で2進数で扱っているため。
10進数で歯切れのよい数でも2進数では循環小数になったりして割り切れない値になることがある(例えば10進数で 0.1 は2進数では 0.00110011...という循環小数になる)。そうなるとどうしても10進数文字列への変換で近似値にしか変換できない。

では最初から内部も全て10進数で全て計算すれば良いではないかと思うかも知れないが、それではコンピュータ内部での計算が遅くなる。
遅くなってでも正確さが必用とされるお金の計算等はそれ用のコンパイラまたはライブラリを使用して実現する(あるいはC言語ではないそれ用に設計された言語を使う)。
デフォルトではCは誤差が出てもいいから素早く計算出来る状態になっていると考えて良い。
125: デフォルトの名無しさん (ワッチョイ db02-WXYe) [] 2019/06/25(火) 03:38:38 ID:t3KmtNcy0(1) AAS
えーと、>>19から延々と話が続いてんのかな?
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.179s*