mixiユーザー(id:4556571)

2014年06月29日23:48

154 view

[X68]いろいろ計算させてみました[X-BASIC]

フォト

「やあ行き倒れだよ。前回のプログラム使っていろいろ計算させてみた。プログラムも改良し、2147483647×2147483647まで求められるようにしたよ。」


フォト

一部の変数の名前を変更しわかりやすくし、変数baiを浮動小数点変数に
変数baiには整数しか入らないが、例えば1111111111×1111111111などを計算させたときに途中でオーバーフローが発生してしまう
そこで浮動小数点変数に変更
狙い通り、2147483647×2147483647までは計算出来るようになった


サブルーチンであるlarge_scale_add関数は最大255桁まで対応しているが、要するにメイン側の乗算プログラムがまだ大きな桁数に対応していないこと、主に32ビット整数変数を使っているためと、超越した数字同士の大小比較が今のところ出来ないなどの問題でこのようになっている


フォト

開発したlarge_scale_add関数の概要
99+999を計算するときの概要
良く見るとノートの上の部分が映せていない。実際は内部処理に都合が良いように999+99にひっくり返す
桁数が多い方が先に来るようにしている
large_scale_add関数の内部はマイナスの付いた負数については対応していない
あと、小数点にも対応していない
今回のように「これは」と思ったプログラムは毎回ノートに書いて記録している
ノートに記録しているおかげで、急にそのプログラムが必要になった時に内部の処理の概要が書いてあることに助かった場面も多い


フォト

「プログラムの世界で言われる一週間前の自分は他人という格言は本当に言いえて妙なもの。ドキュメント化は大事だと思います。ここからはいろんな計算結果を。」


フォト


フォト


フォト

最後に64ビット浮動小数点でダイレクトに計算させたのも合わせて
指数表示になっている
浮動小数点計算でなく32ビット整数計算だと65536×65536でもエラーになってしまう
コンピュータの標準計算能力は意外とゆとりのないものだったのだ


フォト

「電卓とかだと最大何桁まで計算出来るとか書いてあるけど、コンピュータは書かれていませんですよね。どのくらいのものなんだろうとは思っていました。」


フォト

「整数計算では10桁まで出来るが−2147483648から2147483647までの範囲しか表示できません。答えもそれを超えてはいけませんなんて正直に言ったら内部事情が分からない人達が苦情出すだろうし殺到するでしょ。2の32乗までの範囲しかカバー出来ないからそうなってると説明しても大半の人はちんぷんかんぷんだよ。」


フォト

「それでも許さない!」


フォト

「・・・64ビット浮動小数点なら指数になるが2の1023乗まで計算出来る。あと今や古典レベルの浮動小数点コプロセッサ68881/2は内部的にはこれ以上の桁数を扱える命令も用意してはいるし、余裕のあるつくりになっている。今の時代の最新プロセッサは実は内部の数値表現能力は家庭向きのものはぎりぎりのところまで削ってあって64ビット浮動小数点以上はサポートしてない。ソフトウェアに頼ることになる。」


フォト

「モトローラ・・・今は半導体部門はフリースケールか。そこのPOWERPCシリーズは今も余裕のあるつくりになっているのでとてもタフな設計が要求される特別なサーバーには必ず使われている。発熱も少ないし消費電力も少ないので、組み込み用途の分野で根強い人気がある。」


フォト

「スパコンとかどうなってんのさ。」


フォト

「物凄い桁数まで標準で扱えるとか聞いたことがあるな。256ビットとか。それが本当ならメモリもプロセッサも根本からして構造が違うわけで、今の時代の家庭に普及したコンピュータやゲーム機は昔のスパコン並みと言ってもぜんぜんそんなことはないなと言えるね。」


フォト

「何億円の価値が本当にあったってことですね。」





(6月30日)
フォト

「ぶれいく!プログラムの変更をお知らせしまーす。」


フォト

large_scale_add関数内の答えを格納する答えバッファ(mem)への書き込み方を変更しました
答えバッファの内容を反転しなくても良くなりました
わずかですが処理速度も軽くなったと思います


フォト

「以上でーす。」

1 3

コメント

mixiユーザー

ログインしてコメントを確認・投稿する

<2014年06月>
1234567
891011121314
15161718192021
22232425262728
2930     

最近の日記