開発環境
- macOS High Sierra - Apple
- Emacs (Text Editor)
- Python 3.6
- Pythonからはじめる数学入門(参考書籍)
#linux で #ruby をお使いの皆さん、irbとかで`Math.cbrt(1.0-2**-52))`って入れてみて。正答の 0.9999999999999998 ではなく 1.0000000000000002 が返ってくる。同様の現象をまず #swift で確認。他のcbrt()を標準搭載している言語では #nodejs はOKで、CもOK。でもなぜ?🤔
— Dan Kogai (@dankogai) 2018年6月6日
ここのiterativeな方法でやったらぴったり1.0になったhttps://t.co/yE9ZAxMcCW
— Shiro Kawai (@anohana) 2018年6月6日
Computing the Cube Rootを考えず、手軽な方法でぴったり1に。
コード(Emacs)
Python 3
#!/usr/bin/env python3 from sympy import pprint, root import fractions print((1.0 - 2 ** 52) ** (1 / 3)) print((1.0 - 2 ** 52) ** fractions.Fraction(1, 3)) pprint(root(1.0 - 2 ** -52, 3))
入出力結果(Terminal, Jupyter(IPython))
$ ./sample.py (82570.18592591037+143015.75721408537j) (82570.18592591037+143015.75721408537j) 1.00000000000000 $
(内部でどういうアルゴリズムを使用してるのかは調べてないです…)
0 コメント:
コメントを投稿