我已经创建了自己的固定类型整数类型,并且该库适用于许多编译器和平台,唯一需要解决的问题是从内置浮点类型转换为我的类型。
浮点类型可能有小的尾数,但随着指数它可能有很大的值,所以如果我选择将float
,double
或long double
投射到{{1或long long
可能会发生截断。
如果编译器使用IEEE-754规范,那么提取尾数和指数很容易,但如果编译器使用其他格式,该怎么办。
所以,我的问题是:是否有任何通用算法允许我仅使用语言功能从浮点中提取完整值?
感谢
答案 0 :(得分:5)
您可能会发现有用的my answer to a somewhat similar question here。这个想法是,如果底层格式是二进制的,那么如果尾数中没有比最大整数类型中的位更多,则几乎可以保证能够提取尾数和指数而不会丢失。您可以将double frexp(double value, int *exp);
和double ldexp(double x, int exp);
用于此目的。
另一种选择是sprintf()
使用%a
来获取所有数字,然后手动将文字表示转换为您需要的数字。