パスワードを忘れた? アカウント作成
17430803 journal
日記

yuuka_maniaの日記: 浮動小数のバイナリ表記 10

日記 by yuuka_mania

面白い。暇つぶして、私も書いてみよ
https://blog.agile.esm.co.jp/entry/2021/05/24/055043

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2023年10月23日 17時33分 (#4550851)

    Cで16進数なら簡単だし、それじゃだめなのかいな?

    printf("%a\n", 1.23);

    %aまたは%AはC99から。他の言語も似たのがあるんじゃない?

    printfコマンドは%aに対応していなかった……

    • by Anonymous Coward

      多分、パズル的な楽しみを見出してるのだと思う。
      自分でコード書いてデコードするから楽しい奴。
      仕様の規模もそこまでデカくないし。

    • by Anonymous Coward

      >printf("%a\n", 1.23);
      の結果は、
      0x1.3ae147ae147aep+0
      で、求めるものは違うんじゃないの、0x3F800000 が 1.0 だと言っているのだから。

      • by Anonymous Coward

        こうだよね

        float x = 1.0;
        printf("%x\n", *(int*)&x);

        • by Anonymous Coward

          ほかの言語だと、C++のstd::bit_cast関数やJavaのFloat.floatToIntBitsメソッドなどが思い浮かびますね。

        • by Anonymous Coward

          未定義動作踏んでるけどド素人かな

          • by Anonymous Coward

            > 未定義動作踏んでるけどド素人かな

            バイナリ表示の時点で、処理系依存だよ。

            • by Anonymous Coward

              > バイナリ表示の時点で、処理系依存だよ。

              処理系依存は処理系によっては期待した動作となるけど未定義動作は何かを期待するのが間違いだから全然違う話よ?

            • by Anonymous Coward

              バイナリ表示の時点で、処理系依存だよ。

              printf以前の話としてfloatのオブジェクトのアドレスをintとして読み出すのがstrict-aliasing rulesに違反するんだけど分かってるかな?
              https://wandbox.org/permlink/Scl0ZNxjl1SrTKh6 [wandbox.org]

              • by Anonymous Coward

                なるほど [jpcert.or.jp]、こうすれば良いのか:
                #include <stdio.h>
                int main()
                {
                    union { float f; int i; } a = {.f = 1.0};
                    printf("%x\n", a.i);
                }

typodupeerror

ソースを見ろ -- ある4桁UID

読み込み中...