C++ 从浮点转换为自定义数字类型

C++ 从浮点转换为自定义数字类型,c++,floating-point,type-conversion,C++,Floating Point,Type Conversion,我已经创建了自己的固定类型整数类型,该库在许多编译器和平台上运行良好,唯一需要解决的问题是将内置浮点类型转换为我的类型 浮点类型可能有小尾数,但与指数一起,它可能有大值,因此如果我选择强制转换浮点,双精度,或长双精度比如说长长度或无符号长长度可能会发生截断 如果编译器使用IEEE-754规范,那么提取尾数和指数就很容易了,但是如果编译器使用其他格式呢 那么,我的问题是:是否有任何通用算法允许我仅使用语言特性从浮点提取完整值 谢谢您可能会发现这很有用。其思想是,如果基础格式是二进制的,那么如果尾数

我已经创建了自己的固定类型整数类型,该库在许多编译器和平台上运行良好,唯一需要解决的问题是将内置浮点类型转换为我的类型

浮点类型可能有小尾数,但与指数一起,它可能有大值,因此如果我选择强制转换
浮点
双精度
,或
长双精度
比如说
长长度
无符号长长度
可能会发生截断

如果编译器使用IEEE-754规范,那么提取尾数和指数就很容易了,但是如果编译器使用其他格式呢

那么,我的问题是:是否有任何通用算法允许我仅使用语言特性从浮点提取完整值

谢谢

您可能会发现这很有用。其思想是,如果基础格式是二进制的,那么如果尾数中的位数不比最大整数类型中的位数多,则可以几乎保证能够提取尾数和指数而不会丢失。您可以使用
double-frexp(双值,int*exp)
双ldexp(双x,int-exp)用于此目的


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

使用
std::numeric\u limits
成员,您可以很好地了解当前平台上FP类型的特征;从中可以确定尾数的基数和大小,从而确定当转换为整数时,必须乘以多少才能得到整个尾数(同时,您还可以知道是否有足够大的整数可以使用)。查看函数族。