我正在用 C++ 编写我自己的长算术库,它已经完成得很好了,我什至用那个库实现了几个 Cryptogrphic 算法,但仍然缺少一件重要的事情:我想将双精度数(和浮点数/长双精度数)转换为我的号码,反之亦然。我的数字表示为一个可变大小的无符号长整数数组加上一个符号位。
我试图用谷歌找到答案,但问题是人们很少自己实现这些东西,所以我只找到关于如何使用 Java BigInteger 等的东西。
从概念上讲,这相当容易:我取尾数,将其移动由指数指定的位数并设置符号。在另一个方向上,我将其截断以使其适合尾数并根据我的 log2 函数设置指数。
但是我很难弄清楚细节,我可以玩一些位模式并将其转换为双精度,但我没有找到一种优雅的方式来实现这一点,或者我可以通过开始“计算”它用 2,取幂,乘法等,但这似乎不是很有效。
我希望有一个不使用任何库调用的解决方案,因为我试图避免为我的项目使用库,否则我本可以使用 gmp,此外,我经常在其他几个场合有两种解决方案,一个使用内联汇编程序高效且更独立于平台,因此任何一个答案对我都有用。
编辑:我使用 uint64_t 作为我的部件,但我希望能够根据机器进行更改,但我愿意使用一些#ifdefs 来实现一些不同的实现。