4

我已经创建了自己的固定类型整数类型,并且该库可以在许多编译器和平台上正常工作,唯一要解决的问题是将内置浮点类型转换为我的类型。

浮点类型可能有小尾数,但与指数一起它可能有很大的价值,所以如果我选择强制转换float,doublelong doublesay tolong longunsigned long long可能会发生截断。

如果编译器使用 IEEE-754 规范,则很容易提取尾数和指数,但如果编译器使用其他格式怎么办。

所以,我的问题是:是否有任何通用算法允许我仅使用语言特征从浮点中提取全部值?

谢谢

4

1 回答 1

5

您可能会发现我对此处类似问题的回答很有用。这个想法是,如果底层格式是二进制的,那么如果尾数中的位不超过最大整数类型中的位,则几乎可以保证能够毫无损失地提取尾数和指数。您可以使用double frexp(double value, int *exp);anddouble ldexp(double x, int exp);为目的。

另一种选择是sprintf()使用%a数字来获取所有数字,然后手动将文本表示转换为您需要的。

于 2013-02-24T23:24:09.233 回答