学習環境、開発環境
- macOS High Sierra - Apple
- Emacs (Text Editor)
- JavaScript、Python 3.6、Perl 6(プログラミング言語)
- 参考書籍
— すど (@sudosan) 2018年3月14日
=== https://t.co/UtlvbvTF0o でも結果が同じか気になったり。(´・_・`)
— kamimura (@mkamimura) 2018年3月14日
ということで、「===」演算子だとどうなるか確認してみたり。あと、正確に計算できるPython(SymPyモジュール(数式処理システム))や、丸め誤差が発生しない Perl 6を使ったらどうなるか確認してみたり。
JavaScript では、ある一定の精度を越えると切り捨てられるみたい。
コード(Emacs)
HTML5
<pre id="output0"></pre> <label for="x0">x = </label> <input id="x0" type="number" value="3.141592653589793"> <button id="run0">run</button> <button id="clear0">clear</button> <script src="sample53.js"></script>
JavaScript
let pre0 = document.querySelector('#output0'), btn0 = document.querySelector('#run0'), btn1 = document.querySelector('#clear0'), input_x0 = document.querySelector('#x0'), inputs = [input_x0], p = (x) => pre0.textContent += x + '\n'; let x1 = 3.1415926535897931111111111; let output = () => { let x0 = parseFloat(input_x0.value); p(`Math.PI: ${Math.PI}`); p(`x1 = ${x1}`); p(`Math.PI == ${x1}: ${Math.PI == x1}`); p(`Math.PI === ${x1}: ${Math.PI === x1}`); p(`x = ${x0}`); p(`Math.PI == ${x0}: ${Math.PI == x0}`); p(`Math.PI === ${x0}: ${Math.PI === x0}`); }; inputs.forEach((input) => input.onchange = output); btn0.onclick = output; btn1.onclick = () => pre0.textContent = ''; output();
コード(Emacs)
Python 3
#!/usr/bin/env python3 import math import sympy my_pi = 3.141592653589793 for t in [math.pi, sympy.pi]: sympy.pprint(t) print(f'my_pi == {t}: {my_pi == t}')
入出力結果(Terminal, Jupyter(IPython))
$ ./sample53.py 3.141592653589793 my_pi == 3.141592653589793: True π my_pi == pi: False $
SymPy では希望通りの結果に。
Perl 6(6lang)
コード(Emacs)
#!/usr/bin/env perl6 my @nums = (3.141592653589793, 3.1415926535897932); for @nums -> $num { say $num, ': ' , $num == pi; }
入出力結果(Terminal)
$ ./sample53.pl 3.141592653589793: True 3.1415926535897932: True $
JavaScript と同様に、比較演算子「==」による比較の時に、無理数の pi が暗黙的に変換される(?)みたい。
0 コメント:
コメントを投稿