確率計算など行うとき、Excelなどの表計算ソフトでは小数点以下数十桁以上を表示することはできないので、具体的な数値が欲しい場合に困ることがあります。

また、C言語などを使って演算を行う場合においても、演算結果のオーバーフローの問題はついて回る問題です。

そこで困ったときのために、とても大きな、もしくは、とても小さな値の演算を行う場合に有用なサイトやプログラミング言語についてまとめておきます。




任意の演算が可能なサイト



「プログラムなんて書かずに、簡単に演算可能なサイトはないのか!」、「新しいプログラミング言語なんていきなり触れるかい!」という場合も多いと思いますので、そんなときに使えるブックマークしておきたいサイトです。

▼Wolfram Alpha計算知能


以下のようにかなり直感的に数式を入力して、計算することができるサイトです。基本無料で使うことができます。有料でProにアップグレードすることで、さらにデータのアップロードや、計算制限時間の延長など、さらに恩恵を受けることもできます。

加えて、自然言語での入力も可能で、「5個のボールの並べ方は何通りあるか」などと入力すれば、正しい答えを返してくれるような高度な機能も兼ね備えています。

流行りのChatGPTでも、計算は苦手だと言われているので、自然言語で計算を訪ねたい場合には、こちらを使うといいかもしれません。小中高校生くらいまでの算数や数学の課題をこなすくらいであれば、簡単に計算することができます。



CASIOの計算サイト



多少、大きな確率などが四捨五入されて雑に100%とされることがありますが、小さな確率についてはExcelなどと比較して、高精度な計算を行うことができます。

以下にサイトの例を示します。

正規分布:

二項分布:

ポアソン分布:


計算したい処理の名前で検索すれば、大抵ヒットすると思うので、平均値や標準偏差、確率演算など、ある程度、処理として確立されているものの演算結果が欲しい場合には役立つと思います。



オーバーフローしないプログラミング言語



通常、コンピュータではレジスタ長に限界があるため、64bitで表すことのできる整数型や、倍精度浮動小数点型が扱えてもいいところです。

GCCなどの独自拡張である「__int128」という128bitの整数型や多倍長整数を扱えるライブラリなどを用いると、この制限を超えて演算可能だそうですが、普段コードを書いていて、頻繁に出番の無いものに学習リソースを割くのも面倒なので、オーバーフローしないプログラミング言語をまとめておきます。

任意精度演算について


そもそも任意精度演算というものがどういったものなのか、簡単に前置きしておきます。

一般的なコンピュータで整数を扱うときに用いられるint型は、4バイト(32bit)の0と1の羅列で表現され、演算および保存されることが多いです。しかし、32bitで表現できる数値は、整数であれば、符号なしで「0~4294967295」、符号ありだと「-2147483648~2147483647」です。また、32bitで表すことのできる小数点を含む数は一般的にfloat型が用いられ、この単精度浮動小数点数の値の範囲は「+10^-37~+10^38」となります。

つまり、これを超える大きい数、もしくは小さな数を表現しようとすると、さらに大きな数値を表現できるビット数用意して数値を表現する必要があります。

ですが、通常、コンピュータではレジスタ長に限界があるため、64bitで表すことのできる整数型や、倍精度浮動小数点型が扱えてもいいところです。そのような制約のなかでも、処理方法やデータの保存方法を工夫することで、任意の精度の数値を扱えるライブラリや拡張、プログラミング言語があります。ここで制約となるのは、システムが利用可能なメモリ容量くらいです。

このような、数値計算の処理を行う場合に便利なプログラミング言語の例をいくつか簡単に紹介します。以下は主に「List of arbitrary-precision arithmetic software」を参考にしています。これら以外の情報は参照元をご覧ください。

JavaScript


2022年にGitHub上で最も多く使用されたプログラミング言語で1位になったJavaScriptも、ES(ECMAScript)2020の時点でほとんどのブラウザでサポートされており、任意精度の整数をサポートしています。

  • 「gwt-math」というライブラリは「java.math.BigDecimal」へのインターフェース
  • 「BigDecimal.js」ライブラリでは誤差を出さない、任意精度の整数値を構成可能
  • 「DecimalJS」「BigInt」「Crunch」は任意精度整数をサポート

Python


機械学習や深層学習などの処理で近年特に注目されており、2022年にGitHub上で多く使用されたプログラミング言語で2位となったPythonも任意精度型をサポートしています。

組み込みの整数型である「int」(3.x版)、「long」(2.x版)が多倍長整数となっているようです。また、標準ライブラリのDecimalクラスを用いることで、任意の桁数を指定可能です。

「mpmath」や「bigfloat」を用いることで、広範囲な任意精度浮動小数点演算を行うこともできるようです。

▼参考


Haskell


インタプリタやコンパイラの実装などに用いられている印象のある純粋関数型プログラミング言語のHaskellにおいても、組み込みの「Integer」が任意精度の算術演算を実装しています。

Ruby


個人的に使ったことが無いですが、日本で開発され国際電気標準会議で国際規格に認証され、さらに、2022年にGitHub上で多く使用されたプログラミング言語で10位となったRubyも、組み込みの「Bignum」整数型が任意の精度を扱えるそうです。




参考:
https://www.itmedia.co.jp/news/articles/2211/18/news120.html

以上、ありがとうございました。

このエントリーをはてなブックマークに追加
コメントを閉じる

コメント

コメントフォーム
記事の評価
  • リセット
  • リセット