printf 浮点_浮点数举个例子

printf 浮点_浮点数举个例子float 和 double (我内存里的浮点型数据?)前面随便说说~~~~~二更,因为好几个人因为这篇文章把我批斗了,把有问题的地方修正。今天看到一个问题能不能用double去取代float?前段时间,有个朋友问我,在java里面我想把一个高精

float 和 double (我内存里的浮点型数据?)   
printf 浮点_浮点数举个例子
printf 浮点_浮点数举个例子   前面随便说说~~~~~   二更,因为好几个人因为这篇文章把我批斗了,把有问题的地方修正。   今天看到一个问题   能不能用double去取代float?   前段时间,有个朋友问我,在java里面我想把一个高精度的浮点型存储下来,但是每次存储的时候都会被强制降低精度,对于浮点型的理解,真的非常非常重要,特别对嵌入式软件开发,或者算法开发,涉及到数据类的,浮点型非常非常关键,就比如,为什么不让我发0.0000000001 的红包呢? 有没有想过这个问题?如果这样做对于他们服务器后台的运算能力要求非常高,so,~~~~~   所以想简单写一下,float和double的区别以及应用场景
printf 浮点_浮点数举个例子
printf 浮点_浮点数举个例子   1、浮点型的值范围   float和double的范围是由指数的位数来决定的。在VC++6.0中,float占4个字节,double占8个字节。Type Storage size Value range float 4 byte 1.2E-38 to 3.4E+38double 8 byte 2.3E-308 to 1.7E+308long double 10 byte 3.4E-4932 to 1.1E+4932   2、浮点型在内存里面是如何存储的?   我相信这个问题大家没有好好的去考虑过,浮点型如何存储,这才是我们讨论浮点型的关键所在,关于上面的浮点型取值范围,也是网上拷贝下来的,至于真实性,我觉得你们要看了这部分才可能真正理解浮点型,而且最好在自己的编译器去测试,浮点型是可以等于负数的,所以上面的范围,你们认为是正确的吗?
printf 浮点_浮点数举个例子
printf 浮点_浮点数举个例子   我拿float来举个栗子:
printf 浮点_浮点数举个例子
printf 浮点_浮点数举个例子float在内存中的存储方式   以下 部分如发现问题,请留言,会发小小红包感谢,weiqifa0   首先使用基数2而不是基数10来表示科学计数法变体中的浮点值。例如,值3.14159可以表示为1. * 2^{1}   1.是有效数字又名尾数(在上图中指尾数部分); 它是包含有效数字的数字的一部分。此值乘以基数2,上升到1的幂,得到3.14159。   浮点数通过存储有效数和指数(以及符号位)进行编码。   典型的32位布局如下所示:   与有符号整数类型一样,高位表示符号; 0表示正值,1表示负值。   而对于指数部分,因为指数可正可负,8位的指数位能表示的指数范围就应该为:-127-128了, 所以指数部分的存储采用移位存储,存储的数据为数据+127。   举例:
printf 浮点_浮点数举个例子
printf 浮点_浮点数举个例子   剩余的比特用于有效数字。每个位表示从左侧算起的2的负幂,float一共23位,举例:
printf 浮点_浮点数举个例子
printf 浮点_浮点数举个例子   某些平台假定有效数中的“隐藏”前导位始终设置为1,因此有效数中的值始终在[0.5,1之间]。这允许这些平台以稍高的精度存储值。   所以3.14159的值将表示为   现在,如果你将有效数字中的所有位相加,你会注意到它们总共不是3.14195;   他们实际上是3.,(小编实测数据)。   没有足够的位来准确存储值; 我们只能存储一个近似值。有效数字中的位数决定了精度23位给出了大约6位精度的十进制数字。64位浮点类型在有效位数中提供足够的位,可提供大约12到15位的精度。但要注意,有一些数值不能被精确表示。就像1/3这样的值不能用有限数量的十进制数字表示,由于值是近似值,因此使用它们进行计算也是近似值,并且累积误差会累积。
printf 浮点_浮点数举个例子
printf 浮点_浮点数举个例子   注意其中输出
printf 浮点_浮点数举个例子
printf 浮点_浮点数举个例子到0.之后明显出现了误差
printf 浮点_浮点数举个例子
printf 浮点_浮点数举个例子   3、反向验证第二点的存储推断   上面的计算,我们可以通过一个小代码反向验证,代码如下   
printf 浮点_浮点数举个例子
printf 浮点_浮点数举个例子输出16进制数据   so~~~~   3.14159 ≈ 0x40490fd0 = ‭0 0‬
printf 浮点_浮点数举个例子
printf 浮点_浮点数举个例子16进制对应二进制数据   对于double 和 long double的大小和精度可以通过这个方式来验证。
printf 浮点_浮点数举个例子
printf 浮点_浮点数举个例子   4、浮点型printf输出格式   printf输出范围 %f %g %Lf %e   输出如下   
printf 浮点_浮点数举个例子
printf 浮点_浮点数举个例子   5、 精度问题   浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的”1″,由于它是不变的,故不能对精度造成影响。   float:2^23 = ,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;   double:2^52 = 70496,一共16位,同理,double的精度为15~16位。
printf 浮点_浮点数举个例子
printf 浮点_浮点数举个例子   小代码举例   输出   
printf 浮点_浮点数举个例子
printf 浮点_浮点数举个例子   6、浮点值和 “0”   不知道大家对精度是怎么看的,理论上浮点是永远不可能等于“0”的,只能无尽接近于 “0”,所以你拿浮点型 和“0” 比较 ,千万千万不要用 “== ”恒等于符号,而是用大小于符号,精度越大,说明越无尽接近于 “0”,有时候float的精度容易引起问题,看下面的例子。—之前写的,下面论证是否正确   评论已经有人说,浮点值肯定可以等于1,这个不再做论证,现在论证浮点值和0值,是不是相等的。   所以,我做了实验,我的文章不一定保证正确,但是提出的观点一定要有论证的根据   晚上回来很累,跟楠哥睡了一下,10点的时候,楠哥又起来了,我也想更新下评论的问题,我测试的代码如下,里面有注释。   输出如下图
printf 浮点_浮点数举个例子
printf 浮点_浮点数举个例子
printf 浮点_浮点数举个例子
printf 浮点_浮点数举个例子   7、总结   1、浮点型在内存里面的存储方式   2、浮点型的精度问题   3、浮点型和0值比较   后续有新的内容会继续更新   感谢那些给与批评的人,不过,如果,请 嵌入式Linux   或者给 10毛赞赏 ,记住是 10毛

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/85689.html

(0)
上一篇 2024年 7月 27日
下一篇 2024年 7月 27日

相关推荐

关注微信