首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为何"(double)23/(double)10=2.2999999999999998,咋回事

2012-02-05 
为何(double)23/(double)102.2999999999999998,怎么回事?如标题,我在VC7编程时遇到的问题,搞不懂怎么回

为何"(double)23/(double)10=2.2999999999999998,怎么回事?
如标题,我在VC7编程时遇到的问题,搞不懂怎么回事。(double)23=23.00000000000,。(double)10=10.00000000000,   除法之后怎么会是这样一个结果,请高手指教!

[解决办法]
你想多少?浮点运算没有准确值的。
[解决办法]
精度问题。
浮点数在内存中即不是以10进制表示的,也不是完全准确的。
当编译器把你以10进制写在源程序中的数转换成相当的二进制格式存进内存,当CPU进制浮点数运算,以及当把运算结果又一次转换成10进制字符串显示在屏幕上,这其中都会产生精度损失。
[解决办法]
简单的说十进制可以整除的数二进制不一定可以,在计算过程中要从二进制到十进制,再返回来,误差就产生了
[解决办法]
在计算机中表示浮点数采用了IEEE754标准,分为尾数、基数、指数三部分。
如果正确结果是res,计算机表示出的结果是resCalc,如果满足:
|res - resCalc| <= bias
其中bias是误差,那么就可以接收。
说明了计算机中浮点数有精度指标,float和double的精度不同,但是都有具体的指标。


[解决办法]
浮点的精度,
它没有规律。

简单的操作不会带入这个精度误差。
一般的说, (double)23/10 这样的结果应该是 2.300000
[解决办法]
浮点精度的问题,所以一般作浮点相等比较的时候都会使用
f1 - f2 < 0.0001
这样的比较方式
[解决办法]
不可以,下次的结果可能不是2.299999999999...而变成2.300000000001...也说不定。根本就没必要修正,只需要取到需要的精度就可以。再声明下,这不是个问题~~浮点数很少有很“整”的。

热点排行