Loading [MathJax]/extensions/tex2jax.js

2014-01-15

ちょっと大きい数の数値計算にMaximaを使ってみました

講義の資料としてMod(モジュロ)表を自作しようとしたのですが、ちょっとハマったので、、、

演算桁には限界がある
コンピュータのことを知っていれば当然の話ですが、コンピュータの演算桁には限界があります。講義資料用に、ab (mod 33)の表を作成しようとしたのですが、Excel でmod関数を使ったら、ちょっと計算しただけで(10乗当たりで)限界になりました。mod関数を使わなかったといても、12乗当たりで限界に。C言語でunsigned long long型を使ってみましたが、ほぼ同様な結果に。

Maximaというソフト
よくネットにアップされているMod表はどうやって作られているのか?通常の数値型を使わずに配列などを用いるなど、工夫をしてプログラムを書けばCでもできるのでしょうけど、ちょっとめんどくさい。
数値計算用のソフトやライブラリを使えば手っ取り早い。代表的なソフトにはMathmaticaがありますが、今回、フリーソフトのMaximaというのがあるので、これを試してみました。ちなみに、Maximaでabのmod表を出力するコードは以下の通りです。
filename:openw("mod.dat");
for b:1 while(b<33)
do
block(
for a:1 while(a<20)
do
printf(filename,"~d,",mod(b^a,33)),
printf(filename,"~%"));
printf(filename,"~%") ;
close(filename);
view raw aPowerBMod.mc hosted with ❤ by GitHub
Maxmaでコードを書くのは当然初めてなのでいろいろ試行錯誤しましたが、とりあえずこんな感じでいいかと思います。
個人的にはこういった数値計算ソフトを使うのは初めてでしたが、今度は、CやJavaで数値計算ライブラリを使って試してみようかと思います。



0 件のコメント:

コメントを投稿