为什么c++中,如下输出的浮点值不准确?

4.8923的平方应该是23.93459929啊,为什么不准确了?经常这样偏差一些,到底是什么原因?如何解决?... 4.8923的平方应该是23.93459929啊,为什么不准确了?经常这样偏差一些,到底是什么原因?如何解决? 展开
 我来答
道熙呀_鲜道熙
2018-04-21 · TA获得超过2942个赞
知道小有建树答主
回答量:1707
采纳率:66%
帮助的人:272万
展开全部
浮点数不能精确的代表所有实数,同时浮点操作也不能精确的表示真正的算术运算,这导致了很多奇怪情形的产生。这种问题的产生与计算机通常代表的数字是有限精度( finite precision )有关。

比如,0.1和0.01(用二进制存储时)“不可表示”的意思是:当你试图求解0.1的平方时,结果既不是0.01也不是一个接近于0.01的可表示的数。在系统为24位(单精度)表示时,0.1(十进制)是被预先给定e = −4,s = 110011001100110011001101(e是指数,s是有效数位。0.1是正数,符号位为0, 
0.00011001100110011…=1.100110011001…X2^(-4), 
所以其指数是-4),转换为十进制是0.100000001490116119384765625。平方之后结果为0.010000000298023226097399174250313080847263336181640625 。 
但实际上最接近0.01的可表示的数是0.009999999776482582092285156250。 
同样的,π或者π/2是不可表示的意味着当你尝试计算tan(π/2)时不会得到一个有限的结果,或者结果甚至会导致溢出。因为π/2不能被精确的表示,所以对于标准的浮点硬件来说尝试计算tan(π/2)是不可能的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式