そりゃそーだ。
Python 公式ドキュメントの和訳してると結構あんのよね、原文がオカシなことを言ってることが。
これがもうヘンチクリン(太字はワタシ):
これは「なぜ (浮動小数点数があるのに) Decimal が必要なのか」のなかの一文で、つまりこのあと「ほーら、Decimal ならこんなにいーんだぜ」という論述が始まる。
けどこの文章、「why の答えになってない」(あまり)。いっしょけんめい仮数部の表現 \(\sum{a_k \frac{1}{2^k}}\) を説明し、循環小数になることを説明し、切捨てを説明するのはいいのだが、「をぃをぃ、 \(\sum{a_k \frac{1}{10^k}}\) だろうとおんなじだぜ?」など、各々単独ではちっとも論拠として成立はしない。ここ、やるなら IEEE 754 のシカケはシカケとして説明するのはいいけど「それはそれ」として、「選択できない精度 52 ビットに制限されている」とシンプルに言うことだけが「根拠」として成立するだけなのね、本来。
それと「common fractions in base 10」がやはり例のごとく意味不明。「常分数」と「10進数」とは何の関係もない直交した概念。常分数とは単に分母と分子が整数であることを指すのではないのか。さらに「1/3」が循環小数になることを忘れてやしないか。
これに続く一文も、ワタシにはちょっと「それは論述としては弱い」と思えてならない:
先にも書いた通り。「52 ビットという精度が足りてるのか足りてないのか」だけの話でしょう。誤差がたまる、かどうかは要求精度次第。要求精度を遥かに超える誤差について議論したって仕方ないわけです。だからここでも「52 ビットという選べない精度」だけが問題なわけ。誤差がたまるのは「真の無限精度」が実現しない限り起こるんだからさ。(いわゆる「イタチごっこ」。)
つまりなんだか難しい説明を頑張ってしようとしてるけど、「Decimal は任意精度、浮動小数点数は固定精度」てだけのことなんよ。IEEE 754 の仕組みを知ることもときに大事ではあるけれどもね。特にバイナリデータを読み解く必要がある場合なんかにね(とりわけエンディアン違いの)。
2015-12-16 08:30 追記:
イキオイでちょっと御幣を招くこと言っちゃってるんで補足しときます。
当然ながら「2 進数での級数近似では起こって 10 進数では起こらない」ことは本質です。なので IEEE 754 説明をしてこの解説をするのは無論正しい。アタシが問題にしたのはそこではなくて、「10 進数でも起こること」サイドの説明がゴッソリ抜け落ちているために、あたかも「10進だけバンザイ!」に読めてしまうし、多分著者自身がそう誤解してたんだろう、ということです。底が 2 で起こって 10 で起こらないこと、どちらでも起こること、の両方あります。1/3 なんかが「どっちでも起こる」例だね。1.1 がおっさる通りで 2 でしか起こらない。
もう一つが「誤差の伝播」の話ね。
誤差の話は「その数値一個」だけで検討してはダメです。例えば一億人の総資産を厳密に1円単位で計算するとした場合、全ての個人の 1000 円未満を切り捨てた場合の誤差は最大で「999円 x 1億 = 999 億円」です。これはもちろん(厳密にというなら)全然無視できるもんではない、よね。つまり集団の母数も考慮に含めなければいけない。(そして結果として興味が「1000兆円単位」ということなら、相変わらず無視できるわけよ。)
非常に当たり前のことなんだけど、こうやって順を追って考える癖がついてない人が多いから、結構「困ったちゃん」が増殖することになるのよね。