原始浮点数和双重支持多少个小数位?

cod*_*441 6 c++

我读过双重存储15位数,浮动存储7位数.

我的问题是,这些数字是支持的小数位数还是数字中的总位数?

Joh*_*nck 7

如果愿意的话,这些是“有效数字”的总数,从左到右计数,无论小数点在哪里。除了这些数字之外,准确性将无法保持。

您列出的计数以 10 为基数表示。


Bar*_*rry 5

每种类型都支持小数位数的宏。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。


Sam*_*Lou 5

如果您使用的是使用IEEE-754浮点算术的体系结构(与大多数体系结构一样),则该类型float对应于单精度,而该类型double对应于双精度,如标准中所述。

让我们做一些数字:

单精度:

32位代表数字,其中24位代表尾数。这意味着最低有效位(LSB)相对于MSB 的相对值为2 ^(-24),即“隐藏1”,因此未显示。因此,对于固定的指数,最小可表示值是指数的10 ^(-7.22)倍。这意味着对于基本指数表示法(3.141592653589 E 25)而言,只有“ 7.22”十进制数有效,这实际上意味着至少7个十进制始终正确。

双精度:

64位代表数字,其中53位代表尾数。按照相同的推理,将2 ^(-53)表示为10的幂将得到10 ^(-15.95),这意味着至少15个小数将始终是正确的。