我正在编写一些将浮点/双精度转换为定点并返回的函数。有谁知道确定用于浮点数或双精度数的指数部分的位数的最佳方法?我希望使用来自 std::numeric_limits 的东西,但没有运气。
指数部分是由 C++ 标准定义的还是特定于编译器/机器的?或者它可以在运行时变化?
我正在编写一些将浮点/双精度转换为定点并返回的函数。有谁知道确定用于浮点数或双精度数的指数部分的位数的最佳方法?我希望使用来自 std::numeric_limits 的东西,但没有运气。
指数部分是由 C++ 标准定义的还是特定于编译器/机器的?或者它可以在运行时变化?
如果float
在该平台上以 IEC-559(在美国也称为 IEEE 754)进行编码,那么它将始终为 8 位。如果该double
平台的 使用 IEC-559(或任何 64 位版本)编码,那么它将始终为 11。如果不是,那么您甚至不能假设它存储了指数。
float
虽然标准没有指定应该以什么格式存储浮点数,但在 C++11(和 C++03?)中,您可以double
使用numeric_limits<T>::is_iec559
(where T
is a floating-point type ):
#include <limits>
cout << "float is IEC-559? " << numeric_limits<float>::is_iec559 << endl
<< "double is IEC-559? " << numeric_limits<double>::is_iec559 << endl;
numeric_limits<>::{min_exponent, max_exponent} 缺少什么?(他们只能给出归一化数字的答案,如果这不适合您,请与denorm
and结合使用digits
)。
阅读IEEE-754。float
和的指数大小double
应分别为 8 位和 11 位。