原始浮点数和双精度浮点数有多少个小数位?
这个问题在这里已经有了答案:
如果您愿意,从左到右数,无论小数点在哪里,这些都是“有效数字”的总数。 除了这些数字之外,精度不会被保留。
您列出的计数是针对基数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个十进制数字,但这些数字中的大多数并不重要(即“未知” )。
虽然在技术上,这是错误的,因为float
和double
没有像我上面推测的那样普遍定义好的大小(它们是实现定义的)。 此外,存储大小不一定与中间结果的大小相同。
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?