エントリーの編集
エントリーの編集は全ユーザーに共通の機能です。
必ずガイドラインを一読の上ご利用ください。
記事へのコメント28件
- 注目コメント
- 新着コメント
megumin1
IEEE 754の説明をすれば終わる話。﹁処理系と言語仕様・型による﹂は答えになっていないですよ。きちんと理解していないのをごまかしているだけ。floating pointのRepresentationを説明できないなら、この筆者と同じレベル。
quabbin
まぁ普通に、 `from decimal import Decimal;Decimal(str(.1))+Decimal(str(.2))==Decimal(str(.3)) #=> True` だよね?
umaemong
『機械語が2進数へ変換される際』がよくわからないな。単にソースコード上にリテラルで『0.1』と書いても(内部的には2進数なので)10進数の0.1と等しい値ではないということなのだけど。もちろん言語仕様による。
puhu208n
そうやって空気悪くするのは勝手だが、ユーザーが電池消費とかモッサリ動作で他に逃げたらお前責任取れよという返しも成立するぞ。ガチで桁違いに遅くなり得るから。 > コンピューターの都合を押し付けてる
n_vermillion
浮動小数点型の精度と丸め誤差が原因かねー。この設問立てるなら変数を宣言して代入するのを書くと意図が伝わりやすいと思うが、今動的型付が増えたもんな。にしても違和感のある演算だ…。バグの温床やな。
megumin1
IEEE 754の説明をすれば終わる話。﹁処理系と言語仕様・型による﹂は答えになっていないですよ。きちんと理解していないのをごまかしているだけ。floating pointのRepresentationを説明できないなら、この筆者と同じレベル。
umaemong
『機械語が2進数へ変換される際』がよくわからないな。単にソースコード上にリテラルで『0.1』と書いても(内部的には2進数なので)10進数の0.1と等しい値ではないということなのだけど。もちろん言語仕様による。
quabbin
まぁ普通に、 `from decimal import Decimal;Decimal(str(.1))+Decimal(str(.2))==Decimal(str(.3)) #=> True` だよね?
suikyojin
﹁0.1でさえ、コンピューターは近似値として扱う﹂というのは、コンピューターの話としてはよく出てくる。実現方式による問題は、小数において顕著だが、他にも出てくる。2028年問題も32bit表現の限界による。
注目コメント算出アルゴリズムの一部にLINEヤフー株式会社の「建設的コメント順位付けモデルAPI」を使用しています
いまの話題をアプリでチェック!
- バナー広告なし
- ミュート機能あり
- ダークモード搭載
関連記事
面接官「0.1 + 0.2 == 0.3 が成立しない理由を説明せよ」 - Qiita
なぜか これは、計算機が浮動小数点数を2進数で表現する際に、特定の小数は正確に表現できず、誤差が発...
なぜか これは、計算機が浮動小数点数を2進数で表現する際に、特定の小数は正確に表現できず、誤差が発生するためです。10進数の0.1や0.2は、2進数では無限に続く循環小数となるため、これらの数値を正確に表現することができません。その結果、0.1 + 0.2 は 0.3 と等しくならないことがあります。 小数点以下の数値→2進数へ変換する方法CSを修めていればご存知方と思いますが、復習します。 小数点以下の数値を2倍する 結果の整数部分を取り出し、それを2進数の桁として記録する 小数部分だけを次のステップに持ち越す 小数部分が0になるか、所定の精度に達するまで1〜3を繰り返す 0.1 × 2 = 0.2 整数部分: 0 小数部分: 0.2 0.2 × 2 = 0.4 整数部分: 0 小数部分: 0.4 0.4 × 2 = 0.8 整数部分: 0 小数部分: 0.8 0.8 × 2 = 1.
2024/05/26 リンク