私は楽しみのために C++ で独自の長い算術ライブラリを作成していますが、すでにかなり完成しています。そのライブラリでいくつかの暗号化アルゴリズムを実装しましたが、重要なことが 1 つまだ欠けています: double (および float/long double) を私の番号とその逆。私の数値は、unsigned long int と符号ビットの可変サイズの配列として表されます。
私はグーグルで答えを見つけようとしましたが、問題は、人々がそのようなことを自分で実装することはめったにないということです.
概念的には、かなり簡単です。仮数を取り、指数によって決まるビット数だけシフトし、符号を設定します。他の方向では、仮数部に収まるように切り捨て、log2 関数に応じて指数を設定します。
しかし、詳細を理解するのに苦労しています。いくつかのビットパターンをいじってダブルにキャストすることもできましたが、それを達成するためのエレガントな方法が見つからなかったか、開始して「計算」できました2、べき乗、乗算などがありますが、あまり効率的ではないようです。
プロジェクトのライブラリを回避しようとしているため、ライブラリ呼び出しを使用しないソリューションをいただければ幸いです。それ以外の場合は gmp を使用することもできました。効率的で、プラットフォームに依存しないものなので、どちらの答えも役に立ちます。
編集:私は自分のパーツに uint64_t を使用していますが、マシンに応じて変更できるようにしたいと考えていますが、それを達成するためにいくつかの #ifdefs を使用していくつかの異なる実装を行っても構わないと思っています.