我已经创建了我自己的固定类型整数类型,并且该库适用于许多编译器和平台,唯一需要解决的问题是将内置浮点类型转换为我的类型。
浮点类型的尾数可能很小,但与指数一起可能有很大的值(value),所以如果我选择转换 float
、double
或 long double
对 long long
或 unsigned long long
说可能会发生截断。
如果编译器使用 IEEE-754 规范,提取尾数和指数会很容易,但如果编译器使用其他格式怎么办。
那么,我的问题是:是否有任何通用算法允许我仅使用语言功能从 float 中提取完整值?
谢谢
最佳答案
您可能会发现有用的 my answer to a somewhat similar question here .这个想法是,如果底层格式是二进制的,那么如果尾数中的位数不多于最大整数类型中的位数,则几乎可以保证能够无损地提取尾数和指数。为此,您可以使用 double frexp(double value, int *exp);
和 double ldexp(double x, int exp);
。
另一种选择是 sprintf()
使用 %a
获取所有数字,然后手动将文本表示形式转换为您需要的数字。
关于c++ - 从 float 转换为自定义数字类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15057546/