我正在编写一些将float / double转换为定点和返回的函数。有没有人知道确定浮点数或双精度指数部分的位数的最佳方法?我希望使用来自std :: numeric_limits的东西,但没有运气。
指数部分是由C ++标准定义的还是编译器/机器特定的?或者它可以在运行时变化吗?
答案 0 :(得分:6)
如果该平台上的float
是用IEC-559(美国的IEEE 754)编码的,那么它总是8位。如果该平台的double
使用IEC-559(或64位版本)编码,那么它将始终为11.如果不是,那么您甚至不能假设它存储指数。
虽然标准没有指定应该以什么格式存储浮点数,但在C ++ 11(和C ++ 03?)中,您可以测试float
或double
是否符合IEC-559使用numeric_limits<T>::is_iec559
(其中T
是浮点类型):
#include <limits>
cout << "float is IEC-559? " << numeric_limits<float>::is_iec559 << endl
<< "double is IEC-559? " << numeric_limits<double>::is_iec559 << endl;
答案 1 :(得分:1)
numeric_limits&lt;&gt; :: {min_exponent,max_exponent}缺少什么? (他们被限制为标准化数字提供答案,如果这不适合您,请与denorm
和digits
结合使用。
答案 2 :(得分:0)
阅读IEEE-754。 float
和double
的指数大小应分别为8位和11位。
答案 3 :(得分:0)