-5

以下の浮動小数点ディレクティブがRubyでpacking() and unpacking()メソッドを使用してどのように機能するかを理解するのに役立つ人はいますか?

  • D and d
  • F and f
  • g and G
  • e and E

私は以下を試しました:

irb(main):001:0> [2,44,43].pack('D')
=> "\x00\x00\x00\x00\x00\x00\x00@"
irb(main):002:0> [2,44,43].pack('d')
=> "\x00\x00\x00\x00\x00\x00\x00@"
irb(main):004:0> [2,44,43].pack('ddd')
=> "\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00F@\x00\x00\x00\x00\x00\
x80E@"
irb(main):005:0> [2,44,43].pack('fff')
=> "\x00\x00\x00@\x00\x000B\x00\x00,B"
irb(main):006:0> [2,44,43].pack('FFF')
=> "\x00\x00\x00@\x00\x000B\x00\x00,B"
irb(main):007:0> [2,44,43].pack('ggg')
=> "@\x00\x00\x00B0\x00\x00B,\x00\x00"
irb(main):008:0> [2,44,43].pack('GGG')
=> "@\x00\x00\x00\x00\x00\x00\x00@F\x00\x00\x00\x00\x00\x00@E\x80\x00\x00\x00\x0
0\x00"
irb(main):009:0>

出力はどのようになっていますか?そのような計算の論理は何ですか?

前もって感謝します!

4

1 に答える 1

1

これらのディレクティブは、配列内の数値を浮動小数点バイト表現に変換します。

何が起こっているのかを知りたい場合は、このビデオを見ることができます:

浮動小数点表現:例
https://www.youtube.com/watch?v=t-8fMtUNX1A

そして、この記事を読んでください:http:
//www.geeksforgeeks.org/floating-point-representation-basics/

Googleを通じて、「浮動小数点表現」を検索して、上記の回答を見つけました。


例を挙げると、次のようになります。

> [2.0].pack('f').bytes.map(&:to_i)
=> [0, 0, 0, 64]

これは、16進数で次のように表される浮動小数点数です。

0x40000000

あなたがそれを見ることができるところ640x4016進数です。

なぜ2.0になる0x40000000のかを理解するには、コンピューターが浮動小数点数を2進表現に変換する方法を理解する必要があります。

このページを使用してテストできます:
http ://www.h-schmidt.net/FloatConverter/IEEE754.html

たとえば、次のようになり2.0ます。

http://i.imgur.com/qWqFM.png

于 2013-01-12T19:49:19.713 に答える