问题描述
- 为什么同样的运算方式结果不一样,内部怎么处理的。
-
今天自己实现了一个计算器,也用来系统的计算法,发现有个奇怪的东西。
(1/3)*3 和式子1/3*3
现实中我们认为运算方式是一样的,按照逆波兰式的运算顺序,其实也应该一样。我对于无限循环小数都和计算器一样取小数点 后9位。可是前置算出来0.999999999后者是1。想咨询下后者是不是对内部进行优化特殊处理了。还有类似的情况举个例子介绍下~谢谢大家
解决方案
因为1/3对于C语言、C#和Java来说是整除
要写 1.0 / 3.0
或者(double)1/(double)3
解决方案二:
不知道你用的啥语言,反正C与C++都会得到0
解决方案三:
这是浮点数运算的问题,首先浮点算存储就和其他数值不一样,然后而且计算的先后顺序也会导致误差的积累
解决方案四:
lz贴一下具体代码吧, 这要看你取小数点后第9位,是怎么取的了,
如果(1/3)*3
其中的(1/3)你也取了第9位,那就变成了是 0.333333333 * 3, 这个是有精度丢失的
如果是 1/3*3 整个的结果取第9位, 那就是1.0000000000 取第9位, 还是1
时间: 2024-11-03 10:44:09