開発環境
- macOS Sierra - Apple (OS)
- Emacs (Text Editor)
- JavaScript (プログラミング言語)
- Node.js, Safari(JavaScript エンジン)
- Learning JavaScript [邦訳](参考書籍)
Think Perl 6: How to Think Like a Computer Scientist (Laurent Rosenfeld(著)、Allen B. Downey(著)、Oreilly & Associates Inc)のPart 1(Starting with the basics)、Chapter 5(Iteration)の Boolean functions の Exercise 6-2.を JavaScript で取り組 んでみる。
Exercise 6-2.
コード(Emacs)
HTML5
ε = <input id="e0" type="number" value="0.000000000000001"> <button id="run0">run</button> <button id="clear0">clear</button> <pre id="output0"></pre> <script src="sample2.js"></script>
JavaScript
let btn0 = document.querySelector('#run0'),
btn1 = document.querySelector('#clear0'),
input_e = document.querySelector('#e0'),
pre0 = document.querySelector('#output0');
let factorial = (n) => {
let iter = (i, result) => {
if (i === n) {
return result;
}
return iter(i + 1, i * result);
};
return iter(n, 1);
};
let term = (k) => {
let num = factorial(4 * k) * (1103 + 26390 * k),
den = Math.pow(factorial(k), 4) * Math.pow(396, 4 * k);
return num / den;
};
let estimatePi = (epsilon) => {
let result = 0,
k = 0,
t = term(k);
for (; t >= epsilon;) {
result += t;
k += 1;
t = term(k);
}
pre0.textContent += `n = ${k}\n`;
return 1 / (2 * Math.sqrt(2) / 9801 * result);
};
let output = () => {
let e = parseFloat(input_e.value),
pi = estimatePi(e);
pre0.textContent +=
`estimate pi: ${pi}\n` +
`Math.PI: ${Math.PI}\n` +
`difference: ${Math.abs(pi - Math.PI)}\n`;
};
btn0.onclick = output;
btn1.onclick = () => {
pre0.textContent = '';
};
output();
ε =
0 コメント:
コメントを投稿