C言語関係掲示板

過去ログ

No.478.実数を内部表現(2進数表記)するためのコード

[戻る] [ホームページ]
No.3446

実数の32ビット表記方法について
投稿者---とし(2002/11/12 23:45:01)


はじめて投稿します。
VC++でソフトを作り始めて約2ヶ月の初心者です。

実数(浮動小数点)の32ビット表記方法についてですが、概要はホームページを探し回ってなんとなく、イメージできるようになってきたのですが、実際のコーディングになると、どんなコードを書けば良いか、さっぱり、分かりません。
参考になるコードを教えて下さい。

No.3457

Re:実数の32ビット表記方法について
投稿者---かずま(2002/11/13 21:56:12)


> 実数(浮動小数点)の32ビット表記方法についてですが、概要はホームページ
> を探し回ってなんとなく、イメージできるようになってきたのですが、

質問の意味がよく分かりません。
32ビットの浮動小数点とは、float型のことですか。


> 実際のコーディングになると、どんなコードを書けば良いか、さっぱり、
> 分かりません。参考になるコードを教えて下さい。

float の内部表現(符号1ビット、指数8ビット、仮数23ビット)を意識したコード
が分からないということでしょうか。

C では、64ビットの double を使うのが普通です。
float を使うのは、int の代わりに short を使うようなもので、
メモリーを節約したい場合などの特殊な場合だと思うのですが、
なぜ、32ビットの float のコードが必要なのでしょうか。

double だと 10進で 約16桁の精度がありますが、
float だと 10進で 約7桁の精度しかありません。
#include <stdio.h>

int main()
{
    float  a = 0.1, b = 0.2, c;
    double d = 0.1, e = 0.2, f;

    c = a + b;
    printf("c = %f\n", c);
    printf("c = %.16f\n", c);
    f = d + e;
    printf("f = %f\n", f);
    printf("f = %.16f\n", f);
    return 0;
}

実行結果
c = 0.300000
c = 0.3000000119209290
f = 0.300000
f = 0.3000000000000000


No.3459

Re:実数の32ビット表記方法について
投稿者---とし(2002/11/13 23:50:57)


かずま 様
早速の投稿ありがとうございます。

>
>質問の意味がよく分かりません。
>32ビットの浮動小数点とは、float型のことですか。

わかりにくい質問で申し訳ありません。なにぶん、初心者なもので、ご容赦下さい。
推測頂いた通り、32ビットなのでfloat型になると思います。

>float の内部表現(符号1ビット、指数8ビット、仮数23ビット)を意識したコード
>が分からないということでしょうか。
>
>C では、64ビットの double を使うのが普通です。
>float を使うのは、int の代わりに short を使うようなもので、
>メモリーを節約したい場合などの特殊な場合だと思うのですが、
>なぜ、32ビットの float のコードが必要なのでしょうか。
>
>double だと 10進で 約16桁の精度がありますが、
>float だと 10進で 約7桁の精度しかありません。

こちらも推測頂いたとおり、実数を内部表現(2進数表記)するためのコードが分からなくって困っています。で、なぜ、内部表現をする必要があり、しかも、float型かというと、実は通信で実数を送信するのに相手側が32ビット表記(いわゆる2ワード型)でないと受け取れないので、float型についてという事で、質問をさせてもらっています。

計算で使用するわけではないので、精度は7桁もあれば十分です。(いずれ計算で使用する事もあると思いますが・・・。)


No.3460

Re:実数の32ビット表記方法について
投稿者---かずま(2002/11/14 00:46:07)


> こちらも推測頂いたとおり、実数を内部表現(2進数表記)するためのコードが分からな
> くって困っています。で、なぜ、内部表現をする必要があり、しかも、float型かという
> と、実は通信で実数を送信するのに相手側が32ビット表記(いわゆる2ワード型)でない
> と受け取れないので、float型についてという事で、質問をさせてもらっています。

それなら、相手側がどういう内部表現かを具体的に示してもらわないと、
答えようがありません。

32ビットの浮動小数点といっても、PC で一般的に使用されている IEEE754規格のもの
以外に、IBM形式や、DEC形式など、多数の内部表現がありますから。

No.3464

Re:実数の32ビット表記方法について
投稿者---とし(2002/11/14 22:50:14)


>それなら、相手側がどういう内部表現かを具体的に示してもらわないと、
>答えようがありません。
>
>32ビットの浮動小数点といっても、PC で一般的に使用されている IEEE754規格のもの
>以外に、IBM形式や、DEC形式など、多数の内部表現がありますから。

そんなに多くの形式があるとは知りませんでした。
早速、どの形式の内部表現かを調べてみます。