指数使用了多少位

时间:2012-01-12 15:51:13

标签: c++ floating-point fixed-point

我正在编写一些将float / double转换为定点和返回的函数。有没有人知道确定浮点数或双精度指数部分的位数的最佳方法?我希望使用来自std :: numeric_limits的东西,但没有运气。

指数部分是由C ++标准定义的还是编译器/机器特定的?或者它可以在运行时变化吗?

4 个答案:

答案 0 :(得分:6)

如果该平台上的float是用IEC-559(美国的IEEE 754)编码的,那么它总是8位。如果该平台的double使用IEC-559(或64位版本)编码,那么它将始终为11.如果不是,那么您甚至不能假设它存储指数。

虽然标准没有指定应该以什么格式存储浮点数,但在C ++ 11(和C ++ 03?)中,您可以测试floatdouble是否符合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}缺少什么? (他们被限制为标准化数字提供答案,如果这不适合您,请与denormdigits结合使用。

答案 2 :(得分:0)

阅读IEEE-754floatdouble的指数大小应分别为8位和11位。

答案 3 :(得分:0)

浮点数的特征取决于机器架构。它在运行时不会变化。看一下标题&lt; cfloat&gt;你的编译器应该有详细信息。

但你也可以自己潜入机器: W.H的书数字食谱在C 按等人。在第20.1节(Less-numerical algorithms)中包含一个名为machar.c的程序,用于检测机器的浮点功能,而不需要从标准库头中提取任何内容。它也可用online