LoginSignup
41
32

More than 5 years have passed since last update.

JSの数値計算ライブラリ比較まとめ

Last updated at Posted at 2018-08-30

モチベーション

とあるwebサービスの新機能で、
 1. 任意精度の小数も含む計算
 2. 浮動小数点誤差の除去
をしたかったので、

 a. min.jsがあるかどうか(ファイルサイズが小さくなったもの)
 b. 型定義ファイルがあるかどうか

を検討項目に入れ、既存のライブラリを比較しました。

前提

JSのプリミティブNumber型は、倍精度浮動小数点数なので、特有の誤差を生じます。
もし任意精度での計算をしたいとなると、その実装はとてもめんどくさいです。

実は、BigIntという新たな数値型が任意精度計算をサポートしますが、
まだプロポーザルの状態です。

  • TC39でプロポーザルに挙がっている新しい数値型
    • 現在はStage3
    • 採用確定ではない(Stage4になるまでは却下される可能性あり)
  • 任意精度の整数
    • ハードウェアがサポートしているのではなく、各処理系がソフトウェア的に実装する

JavaScriptの任意精度整数: BigInt vs big-integer - Qiita
JavaScriptのBigIntで任意精度の整数値を扱う

また、BigIntは整数だけなので、小数点をサポートしません。

数値計算ライブラリ比較表

ライブラリ 機能 最終更新 minサイズ 型定義 備考 GitHub
bigNumber.js 任意精度 2018年 8 kB あり APIが読みやすい MikeMcl/bignumber.js
numeral.js メインは表示制御 2017年 11 kB あり 公式ページがイケてる adamwdraper/Numeral-js
BigInteger 任意精度整数 2018年 27 kB あり 活発に開発されている peterolson/BigInteger.js
math.js 高機能
(複素・行列など)
2018年 135 kB あり 内部でBigNumber.jsを使っているらしい josdejong/mathjs
BigInt 任意精度整数 - - - Chromeのみ対応
(2018/8現在)
-
decimal.js 最低限の計算機能のみ 2011年 なし なし shinuza/decimal-js
jsdecimal 4倍精度(28桁まで) 2015年 なし なし 日本人の誰かが書いたやつ hiroshi-manabe/JSDecimal
bigDecimal.js 情報が少ない 2012年 なし なし 古い iriscouch/bigdecimal.js

結局どれ?

僕は、任意精度・小数が使える中で、もっともminの小さいBigNumber.jsを選びました。

今後BigIntが正式採用されれば、BigNumberも採用される流れになるかもしれませんが、
当面はブラウザのサポートをあてにはできないでしょう。

IEやEdgeを捨てられないサービスでは特にね、、、、

41
32
0

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
41
32