Skip to content

Instantly share code, notes, and snippets.

@miya0001
Created August 19, 2019 02:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save miya0001/15e1ba9d1f51b91c42893aaccd68c08e to your computer and use it in GitHub Desktop.
Save miya0001/15e1ba9d1f51b91c42893aaccd68c08e to your computer and use it in GitHub Desktop.
Node + ピタゴラスの定理を使って円周率を計算する
#!/usr/bin/env node
const max = 1000000000;
let n = 6
let side1 = 0
let side2 = 1
let side3 = 1
for ( let i = n; i <= max; i = i * 2 ) {
side1 = 1 - Math.sqrt( 1 - ( side3 / 2 ) ** 2 )
side2 = side3 / 2
side3 = Math.sqrt( side1 ** 2 + side2 ** 2 )
console.log( `${i * 2}: ${side3 * i}` )
}
@miya0001
Copy link
Author

miya0001 commented Aug 19, 2019

6角系から順番に倍々にしていって約16億角形まで計算して、円周率を求めるサンプル。
この例では小数点以下16位までしか計算できない。

動作例:

$ node pi.js 
12: 3.105828541230249
24: 3.1326286132812378
48: 3.1393502030468667
96: 3.14103195089051
192: 3.1414524722854624
384: 3.141557607911858
768: 3.1415838921483186
1536: 3.1415904632280505
3072: 3.1415921059992717
6144: 3.1415925166921577
12288: 3.141592619365384
24576: 3.141592645033691
49152: 3.141592651450768
98304: 3.1415926530550373
196608: 3.1415926534561045
393216: 3.141592653556372
786432: 3.141592653581438
1572864: 3.1415926535877046
3145728: 3.1415926535892713
6291456: 3.141592653589663
12582912: 3.141592653589761
25165824: 3.1415926535897856
50331648: 3.1415926535897913
100663296: 3.141592653589793
201326592: 3.1415926535897936
402653184: 3.1415926535897936
805306368: 3.1415926535897936
1610612736: 3.1415926535897936

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment