演算桁には限界がある
コンピュータのことを知っていれば当然の話ですが、コンピュータの演算桁には限界があります。講義資料用に、ab (mod 33)の表を作成しようとしたのですが、Excel でmod関数を使ったら、ちょっと計算しただけで(10乗当たりで)限界になりました。mod関数を使わなかったといても、12乗当たりで限界に。C言語でunsigned long long型を使ってみましたが、ほぼ同様な結果に。
Maximaというソフト
よくネットにアップされているMod表はどうやって作られているのか?通常の数値型を使わずに配列などを用いるなど、工夫をしてプログラムを書けばCでもできるのでしょうけど、ちょっとめんどくさい。
数値計算用のソフトやライブラリを使えば手っ取り早い。代表的なソフトにはMathmaticaがありますが、今回、フリーソフトのMaximaというのがあるので、これを試してみました。ちなみに、Maximaでabのmod表を出力するコードは以下の通りです。
数値計算用のソフトやライブラリを使えば手っ取り早い。代表的なソフトにはMathmaticaがありますが、今回、フリーソフトのMaximaというのがあるので、これを試してみました。ちなみに、Maximaでabのmod表を出力するコードは以下の通りです。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); |
Maxmaでコードを書くのは当然初めてなのでいろいろ試行錯誤しましたが、とりあえずこんな感じでいいかと思います。
個人的にはこういった数値計算ソフトを使うのは初めてでしたが、今度は、CやJavaで数値計算ライブラリを使って試してみようかと思います。
0 件のコメント:
コメントを投稿