float精度 问题: float精度是几位小数?

float精度 问题: float精度是几位小数?,第1张

float精确到七位小数。

float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,因为它是不变的,故不能对精度造成影响。

float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字。

简介:

浮点型数据类型,FLOAT 数据类型用于存储单精度浮点数或双精度浮点数。浮点数使用 IEEE(电气和电子工程师协会)格式。

浮点类型的单精度值具有 4 个字节,包括一个符号位、一个 8 位 二进制指数和一个 23 位尾数。由于尾数的高顺序位始终为 1,因此它不是以数字形式存储的。此表示形式为 float 类型提供了一个大约在 -3.4E+38 ~ 3.4E+38 之间的范围。

后面6位小数。

精度主要取决于尾数部分的位数。

对于float32(单精度)来说,表示尾数的为23位,除去全部为0的情况以外,最小为2-23,约等于1.19*10-7,所以float小数部分只能精确到后面6位,加上小数点前的一位,即有效数字为7位。

同理float64(单精度)的尾数部分为52位,最小为2-52,约为2.22*10-16,所以精确到小数点后15位,加上小数点前的一位,有效位数为16位。

float32和float64可以表示的数值很多:

浮点数类型的取值范围可以从很微小到很巨大。浮点数取值范围的极限值可以在math包中找到:

常量math.MaxFloat32表示float32能取到的最大数值,大约是3.4e38。

常量math.MaxFloat64表示float64能取到的最大数值,大约是1.8e308。

float32和float64能表示的最小值分别为1.4e-45和4.9e-324。

这是float的理解,不是具体实现分析,需要原理的同学请找相关内容看一下;

c++的float类型用于表示有小数部分的数字,但是它不太适合用户需要保留特定精度要求的数字。

简单理解float需要两个部分保存数据:一部分表示值,另一部分表示放大或者缩小。

假设 表示值的部分范围是1~999, 表示放大或缩小的部分范围是1~10,000,000,(实际可以表示负数和缩小,而且不是这个范围,这里为了简单说明,取最简单的方式)

数字a = 987*10,000,000

数字b = 987*1

a+b 的结果为a

可以理解为任何数字都是被切分为1~999份,每一份的表示内容为放大部分的值;

a被切分为987份,每一份表示10,000,000

b被切分为987份,每一份表示1

明显a+b = 9870,000,987,从左边开始只能切分为987份,每一份表示10,000,000

内容只是一个理解的角度,不一定适合你的理解,不理解请忽略。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11217390.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存