※ ChatGPTを利用し、要約された質問です(原文:除算について)
除算についての疑問
このQ&Aのポイント
除算についての筆算の方法と、小数の誤差について疑問があります。
特に、ビット演算を使用した計算方法について教えていただきたいです。
また、double型の誤差についても知りたいです。
こんにちは。趣味でプログラミングをしているものです。
さっそくですが、質問させていただきます。
まず、9÷3 について9と3をビットで表し
筆算をしてみたところ、次のようになりました。
11
11/1001
11
------
11
11
------
0
-----------------------------------------------
次に 3÷7 について考えてみたのですが
操作(A),(B) について以下のように決めます
(A) ある自然数 n を10倍する
10n = 2 * ( 4n + n ) だから
( n を2ビット左にシフトして n を足したもの ) を
1ビット左にシフトする ---- (1)
(B) 与えられた数を10倍した回数を k とする。
( 与えられた数を10倍するたびに k が 1 ずつ増加していく )
--- (2)
3÷7 をビットで表した筆算をすると
まず商が整数で求められないので (A) (B) により
3を10倍してkをインクリメント
30 をビットで表したものは 11110 になる。
これを筆算すると
ビットで表した商は 100 余りは 10
10進法だと 4 余り 2 になる。
さらに余りの 2 を10倍して k をインクリメント
ビットの筆算をしていく
・
・
・
ここで質問させていただきたいのですが、
(1)
このようにすると小数第k位の商が
10進法では正確に表していけると思うのですが、
誤差が生じる場合もあるのでしょうか?
(2)
別のタブを用いて見ていただきたいのですが、
以下のサイトでは long double などの計算についての
誤差について示していますが、
http://www.seiai.ed.jp/t2000/java/jv014c.html
double について誤差がでるのは、
double では
(ある数)* (ネイピア定数の累乗) で表しているからでしょうか?
小数の部分もビットで表しているからでしょうか?
ご存知のかた、教えていただけないでしょうか?
よろしくお願いします。
お礼
お礼が遅れてしまい大変申しわけありません。 誤差につきましては、また改めて質問させていただきたいと思います。いったん質問を締め切らせていただきます。 貴重な時間をさいての回答、ありがとうございました。