掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.30008

浮動小数点型の内部表現を表示
投稿者---EDY(2007/04/03 21:46:11)


浮動小数点の内部表現について、文献で調べて構造は理解しているのですが、実際にどうなっているのか見てみたいと思って、作ろうとしているのですが、
不動小数点型ではビット演算ができないようなので、どうすればよいのかわかりません。。
どのようにすればよいのか教えてください。
あるいは無理なのでしょうか?
よろしくお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:浮動小数点型の内部表現を表示 30011 επιστημη 2007/04/03 22:13:36
<子記事> Re:浮動小数点型の内部表現を表示 30013 たかぎ 2007/04/04 00:14:44


No.30011

Re:浮動小数点型の内部表現を表示
投稿者---επιστημη(2007/04/03 22:13:36)
http://blogs.wankuma.com/episteme/


double value;
char* ptr = (char*)&value;

んでもって、ptr[0]..[N-1] を16進なりなんなりで出力。



この投稿にコメントする

削除パスワード

No.30012

Re:浮動小数点型の内部表現を表示
投稿者---EDY(2007/04/03 22:58:42)


>double value;
>char* ptr = (char*)&value;
>
>んでもって、ptr[0]..[N-1] を16進なりなんなりで出力。

どうもありがとうございました!
そのとおりに作って、2進数表示するようにしてみました。
一応規則的といえるような表示にはなるのですが、あっているのでしょうか?以下ソースコードです。
#include<stdio.h>
#define BYTESIZE 8
int main(void)
{
    int i,j,k;
    char *ptr;
    float value[10]={0.00003,2,3,4,5,6,7,8,9};
    for(k=0;k<10;k++){  
        ptr=(char *)&value[k];
        for(i=0;i<sizeof(float);i++){
           for(j=0;j<BYTESIZE;j++)
            printf("%d",(*(ptr+i)<<j&1<<7)?1:0);
        putchar('\t');
        }
        putchar('\n');
    }
}





この投稿にコメントする

削除パスワード

No.30013

Re:浮動小数点型の内部表現を表示
投稿者---たかぎ(2007/04/04 00:14:44)
http://takagi.in/


float型もlong型も32ビットの処理系の場合、
typedef union
{
  float f;
  unsigned long l;
} float_ulong_t;
とか
float x;
unsigned long *p = (unsigned long*)&x;
のようにすれば、処理が簡単になると思います。
後者は、境界調整が一致するとは限らないなどの問題もありますが、まあ、実用上は大丈夫でしょうし、実験のためのコードならこれでも十分です。



この投稿にコメントする

削除パスワード

No.30017

Re:浮動小数点型の内部表現を表示
投稿者---EDY(2007/04/04 10:04:57)


ありがとうございます!
両方32ビットだったので、教えていただいたやり方でもできました!
ようはビット列を整数型の値だと解釈させればよいということだったんですね、
どうもありがとうございました!


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧