アプリ版:「スタンプのみでお礼する」機能のリリースについて

 10進数の0.2を2進数に変換していったら、循環小数になってしまいました。表せないことはわかったのですが、これをコンピュータはどうやって認識するのでしょうか?
 まさか0.2+0.2を「計算できません。」なんて表示するコンピュータはみたことがないし・・・。
 ほかに、どうにかして、0.2を2進数で表示する方法ってないんですか?どなたか教えてください。

A 回答 (6件)

> 2進化十進数で少数を表すってどうやるんでしょうか



4ビットを十進一桁として必要な桁数分のレジスタを用意します(CPUの命令セットに二進化十進演算が無い場合は、命令セットにおけるバイトなりワードなりの最小算術演算単位を一桁として、メモリを用意します)
各桁に十進数に対応する二進数を置き(つまりA~Fは使用しない)、桁ごとに演算します
演算結果がA~Fとなる桁が出たら、繰上げや繰下げを行なって解消します(勿論16進でキャリー/ボローが発生した場合も同様です。またCPUの命令セットの二進化十進演算を利用した場合はこれらの処理は自動的に行なわれます)
    • good
    • 0
この回答へのお礼

 なんだか難しそうですね。でも参考になりました。ありがとうございました。

お礼日時:2002/10/14 08:07

> 分数の使い方がわかりません



各数ごとに分母と分子、2つ分のレジスタを用意します
例えば10分の2なら、分母1010、分子10という具合です
10進小数のように常に分母が10のn乗であることが決まっている場合なら、分母の代わりにnだけを保存しても用は足ります(つまり指数部というわけです)
    • good
    • 0
この回答へのお礼

 なるほど、なんだか変わった使い方な気がしますけど、これでもいいんですね。ありがとうございました。

お礼日時:2002/10/14 08:06

仮数部と指数部ですね。



IEEEフォーマットの浮動小数点(ほとんどのパソコンで採用されている)の場合だと
32ビット浮動小数点:
符号:1ビット。負の数の場合1、正の数の場合0
仮数部:23ビット。正規化された固定小数点で表現される
指数部:8ビット。仮数部が2の何乗かを示す
となります。

浮動小数点について詳しくは参考URLで

で、循環小数の場合ですが、有効制度までを算出して近似値とします。
結果、0.1+0.1は0.2とはなりません。
これを精度誤差と言います。
浮動小数点の計算では制度誤差がつき物なので、ソフト技術者が精度誤差の少ない(全くなくすことは不可能)アルゴリズムを考えます。

参考URL:http://www.ne.jp/asahi/license/ikawa17/info_fe/p …
    • good
    • 0
この回答へのお礼

 ありがとうございます。よくわかりました。なかなか難しいのですね。

お礼日時:2002/10/12 07:49

浮動小数点というのを使います。


例えば16ビットのデータとして、
最上位ビットを符号、あとの15ビットが真数部と仮数部に分かれます。
何ビットずつとかの詳しいことは忘れましたが、概念を説明しますと、0.2の場合、真数部は2、仮数部は10^-1を表すようになっています。これで、小数を表すことができます。

「浮動小数点」をキーワードに検索されれば、詳しいページがきっとあると思います。
    • good
    • 0
この回答へのお礼

 ありがとうございます。でも僕の記憶の中では、浮動小数点に直すときに16進数に変換するんだったような・・・。

お礼日時:2002/10/12 07:48

あるいは二進化十進数計算させるとか

    • good
    • 0
この回答へのお礼

うーん、2進化十進数で少数を表すってどうやるんでしょうか。よくわかりません。

お礼日時:2002/10/12 07:47

分数を使ったらどうですか?

    • good
    • 0
この回答へのお礼

ありがとうございます。でも分数の使い方がわかりません。どうやったらいいのですか?

お礼日時:2002/10/12 07:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!