0

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

これは、私が変換したいフォーマットについて

  • 0x0000 000000100000は番号1です
  • 0xFFFF FFFFFFF00000は数値-1です
  • 0x0000 000000000001は0.95x10^-6です
  • 0xFFFF FFFFFFFFFFFFは-0.95x10^-6です

これまで、C標準ライブラリのmodf関数の使用について説明してきましたが、それでは私のニーズを十分に満たすことができません。Boostのいくつかの型変換クラスも調べましたが、適切なソリューションも見つかりませんでした。この変換を行うためのライブラリまたは簡単な方法を知っている人はいますか?たぶん、ブーストに精通している誰かが私を正しい方向に向けることができます。

これがまったく役立つ場合は、doubleの保存方法に関するドキュメントを以下に示します。

編集:

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

4

2 に答える 2

4

これにより、必要な結果が得られるはずです。

double d = someValue();
int64_t fixed_point = static_cast<int64_t>(d * (1024*1024));
于 2009-07-24T17:44:05.780 に答える
1

2 ^ 20を掛けてから、対象の整数型に変換します(おそらくlong long)

于 2009-07-24T17:43:19.730 に答える