Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

どうも、浮動小数点数オタクのmod_poppoです。 昨日開催された ABC169 の C 問題が浮動小数点数の罠な問題だったらしいので、どこが罠なのか、そしてどうすれば罠を回避できるのかを解説してみます。 また、典型的な誤答に対しては、それを落とすためのテストケースも用意しました。 問題文(引用) まず最初に問題文を引用しておきます。 AtCoder Beginner Contest 169 | C - Multiplication 3 問題文 $A\times B$ の小数点以下を切り捨て、結果を整数として出力してください。 制約 $0\le A\le 10^{15}$ $0\le B<10$ $A$ は整数 $B$ は小数第 2 位まで与えられる 入力 入力は以下の形式で標準入力から与えられる。
当たり前のことに感じますが、0.1は浮動小数点数(IEEE 754)では正確に表現できません。 なのにprintをしたときに0.1と表示されるのは不思議です。 このことについて分かったことを書いておきます。 環境 この記事ではPython 3.7を使用しています。 【前提】浮動小数点数 この記事で、以降"浮動小数点数"という場合は、"IEEE 754 倍精度"のことを指します。 浮動小数点数のフォーマットは、数を以下の形式に変換し、sign、exp、fracを順に並べたものです。
※筆者は驚くと猫になってしまいます. 2次方程式の解の計算でさえこのように誤差が生じ,結局どっちが真の解かも分かりません. 普段計算機でしている計算の結果が本当に正しいものなのか,ちょっと心配になってきますね. 実は2次方程式に関しては誤差混入の原理が明らかになっていて誤差を回避する方法も知られています. 数値計算は前の計算結果を使って次の計算を行なうので,どこか一箇所でも誤差が混入してしまうとそれ以降の計算は信頼できないものになります. 大量の計算を行なう過程のどこかで致命的な誤差の混入が発生していたら…と考えると恐ろしくて夜しか眠れません. さて,ここからが本題です.(唐突) 本当に紹介したかったのは次の例で,筆者がこれを知った時は驚きのあまり研究室で叫びました. 計算機不信に陥るので,覚悟してください(笑) 3. 数値計算に潜むとんでもないリスク では,いよいよ本題の"数値計算に潜む
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く