かなり昔の話にはなるのですが、参考にお伺いします。
質問です。
コンパイラーを作るとき、変数の中身を見て何ビットいるかをチェックしてレジスタを選んでいるのか?
ということです。マイナス値はプラスで計算し、
桁落ちを使いたいのはなんとなく分からないではありませんが。
ちょっと長くなりますが事の詳細を。
cobolという言語のベータバージョンを使って開発していました。
ベータバージョンですからバグはいっぱいある前提です。
あるひとはループさせてある数から2をマイナスになるまで引くというプログラムです。
どんな数字を入れようがいつか終わりますよね。
テストですからそんなに大きな数も入れません。
そしたら無限ループしてしまいまして調査の結果14を足している事が判明しました。
「4ビットでマイナスになってない」ことは想像できました。
また、
-1を掛ける操作を作って'-1'を入れると'95'が返ってきました。
(画面は2桁表示ですので)
で、'-2'を入れると'90'が返ってきました。
「5を引くなんてどこにも書いた覚えはないぞ?」と思って
'-3'を入れると'85'になりました。
「これはおかしい」と思って内部の値を調べると4294967295になっていました。
原因は?「32ビットでマイナス忘れてる」またか、と思いまたがそこはベータ版。
文句はいえません。報告を上げるとアメリカの会社に報告を上げるの?と嫌な雰囲気。
そこはあの人の出番でしょうと某海外企業の日本支社に努めている方に報告したところ、
「原因企業がわからないからOSは仕方ないとしてcobolだけにしてくれ」と言われ、
(データベースとオンラインも含んでいたため)そしてやっとアメリカに報告できました。
「プログラムの方は直しておいた」って聞かされ、ん?と思って見ると'-1'固定で掛けていたので、
(zero - input)と書いてありました。変数でマイナスを掛ける処理は注意するようにと注意されました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/07 06:15
2016/12/07 06:25
2016/12/08 02:28
2016/12/08 02:29