原始浮点数和双精度浮点数有多少个小数位?

这个问题在这里已经有了答案:

  • '浮动'与'双'精度6个答案

  • 如果您愿意,从左到右数,无论小数点在哪里,这些都是“有效数字”的总数。 除了这些数字之外,精度不会被保留。

    您列出的计数是针对基数10的表示。


    每种类型支持的小数位数都有宏。 gcc文档解释了它们是什么以及它们的含义:

    FLT_DIG

    这是浮点数据类型的精度的小数位数。 从技术上讲,如果p和b分别是表示的精度和基数(分别),那么小数精度q是最大小数位数,这样任何含q个10位数的浮点数都可以四舍五入为浮点数p基数字b并再次返回,而不改变q个十进制数字。

    该宏的值应该至少为6 ,以满足ISO C.

    DBL_DIG
    LDBL_DIG

    这些与FLT_DIG类似,但分别用于数据类型double和long double。 这些宏的值应该至少为10

    在gcc 4.9.2和clang 3.5.0上,这些宏分别产生6和15。


    这些数字是支持的小数位数还是数字中的总位数?

    他们是每个数字中包含的重要数字(虽然你可能不需要所有数字,但他们仍然存在)。 相同类型的尾数总是包含相同的比特数,所以如果按照小数位数来考虑,则每个数字必然包含相同数量的有效“数字”。 你不能储存更多的数字,而不是放入尾数。

    然而,“支持”数字的数量要大得多,例如float通常会支持多达38个十进制数字,而double将支持多达308个十进制数字,但这些数字中的大多数并不重要(即“未知” )。

    虽然在技术上,这是错误的,因为floatdouble没有像我上面推测的那样普遍定义好的大小(它们是实现定义的)。 此外,存储大小不一定与中间结果的大小相同。

    C ++标准非常不情愿地精确定义任何基本类型,几乎所有东西都留给实现。 浮点类型也不例外:

    3.9.1 / 8
    有三种浮点类型:float,double和long double。 double类型至少提供与float相同的精度,long double类型的精度至少与double相当。 float类型的值的集合是类型double的值集合的子集; 类型double的值集合是long double类型的值集合的子集。 浮点类型的值表示是实现定义的。

    当然,所有这些在实践中并不是特别有用。

    在实践中,浮点(通常)符合IEEE 754标准, float宽度为32位, double精度宽度为64位(如存储在内存中,寄存器在一些显着的主流架构上具有更高的精度)。

    这相当于分别为24位和53位matissa,或7和15个完整小数

    链接地址: http://www.djcxy.com/p/27461.html

    上一篇: How many decimal places does the primitive float and double support?

    下一篇: how to solve cos 90 problem in java?