LoginSignup
0

More than 5 years have passed since last update.

V8における円周率の実装

Posted at

JSのMath.PIの真の値を調べた。

V8のGitHubミラーで、「math pi」などで検索し、それっぽいコードを拾ってきた。
https://github.com/v8/v8/blob/master/src/bootstrapper.cc#L2649

src/bootstrapper.cc
double const kPI = 3.1415926535897932;
// (中略)
InstallConstant(isolate, math, "PI", factory->NewNumber(kPI));

というように定義されていた。というわけで真の値は3.1415926535897932である。

確かにChrome DevToolのConsoleでMath.PI * (10**16)と打つと、31415926535897932となるが、Math.PI * (10**17)と打つと314159265358979300になるので、狂い始めるのは確実にこの頃である。

ちなみにSpiderMonkeyも調べたのだが、M_PIで実装されていたので、おそらく環境依存である。ビルドバッチを調べるのが面倒くさいのでやめた。
よく考えたら、なぜV8はM_PIじゃないのかとは思った。
あとM_PIの界隈はとても闇が深いことがわかった。なんかmath.hcmathには直接定義してはいけないらしく……
C言語(標準)にM_PIは無い

もうC++のコードは読みたくない。以上。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0