0


0

C / C doubleを64ビットの2の補数に変換する必要があります。ここで、基数の点はビット番号19(両端を含む)です。

これは私がに変換したいフォーマットのためにそれを意味します

  • 0x0000 0000 0010 0000は数値1です

  • 0xFFFF FFFF FFF0 0000は数値-1です

  • 0x0000 0000 0000 0001は0.95 x 10 ^ -6です

  • 0xFFFF FFFF FFFF FFFFは-0.95 x 10 ^ -6です

これまでのところ、私はC標準ライブラリのmodf関数を使用することについて考えましたが、それは私のニーズを実際にはカバーしていません。 Boostでいくつかの型変換クラスも調べましたが、そこでも正しい解決策が見つかりませんでした。 誰かがこの変換を実行するためのライブラリまたは簡単な方法を知っていますか? Boostに慣れた人が私を正しい方向に向けるかもしれません。

http://en.wikipedia.org/wiki/Double_precision#IEEE_754_double_precision_binary_floating-point_format:_binary64[this]で問題が解決しない場合、doubleがどのように格納されるかについてのいくつかの文書があります。

編集する

私はフォローアップの質問があります、これは本当に私自身の利益のためです。 '基数’とは何ですか? これは小数点のようなものです。 しかし、基数という用語を聞いたのは、離散高速フーリエ変換について学んでいたときだけでした。 私の記憶が正しければ、DFTを計算するのに必要な乗数が少ないので、基数IIの方法は高速です。

2 回答


4


これはあなたが望む結果を与えるはずです:

double d = someValue(); int64_t fixed_point = static_cast(d *(1024 * 1024));


1


2 ^ 20倍してから、ターゲットの整数型に変換します(おそらくlong long)。