Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Floating point 与浮点数和双精度相关的概念_Floating Point_Double_Precision_Floating Accuracy_Floating - Fatal编程技术网

Floating point 与浮点数和双精度相关的概念

Floating point 与浮点数和双精度相关的概念,floating-point,double,precision,floating-accuracy,floating,Floating Point,Double,Precision,Floating Accuracy,Floating,为什么浮点的精度在小数点后高达6位,而双精度在小数点后高达15位? 有人能给出一个数学解释吗?说浮点或双精度是小数位数,这是一个草率的术语。float和double通常使用IEEE-754 binary32和binary64格式实现,这两种格式分别使用24位和53位的有效位。有效位是浮点表示的小数部分。它伴随着一个符号位和一个指数。这些格式的精度分别为24位和53位 精度足够,对于浮点,任何具有六个有效数字的十进制数字都可以足够精确地转换为浮点,以便转换回六位十进制数字后产生相同的数字。本文讨论

为什么浮点的精度在小数点后高达6位,而双精度在小数点后高达15位? 有人能给出一个数学解释吗?

说浮点或双精度是小数位数,这是一个草率的术语。float和double通常使用IEEE-754 binary32和binary64格式实现,这两种格式分别使用24位和53位的有效位。有效位是浮点表示的小数部分。它伴随着一个符号位和一个指数。这些格式的精度分别为24位和53位

精度足够,对于浮点,任何具有六个有效数字的十进制数字都可以足够精确地转换为浮点,以便转换回六位十进制数字后产生相同的数字。本文讨论的所有转换都使用四舍五入到最近值。六是限制;有些七位十进制数字在往返转换中无法保存。对于double,限制为15位有效数字


下面是我们如何找到极限的。24位有效位可以表示224个值。这是16777216,因此它肯定能够表示从0到9999999的所有七位十进制数字。但是,如果我们要表示某个七位十进制数字a.bcdefg•10n,则此区间中的最后一个十进制数字9.999999•10n具有一些浮点表示f•2e。因为10的幂相对于2的幂是不规则的,所以f可能很小,这意味着我们不是用0.000000•10n到9.999999•10n的数字来表示,有效位完全在一个序列0到16777215之间。我在这里对一些细节进行了修饰;有效位低于222的数字将被重新调整为正常范围内的另一个指数。但是,指数范围越小,精度就越高,所以这不是问题。相反,在某个点上发生了翻滚,指数增加。所以我们失去了一点精度。因此,我们可以保证在往返转换为以b为底的p位浮点格式后,十进制数字的数量是floorp−1•log10b。该公式在C 2018 5.2.4.2.2 12中给出。

Eric:这里有一个关于类似主题的问题,我想你可以回答:。