2 u010794180 u010794180 于 2014.12.20 08:59 提问

为什么同样的运算方式结果不一样,内部怎么处理的。 1C

今天自己实现了一个计算器,也用来系统的计算法,发现有个奇怪的东西。
(1/3)*3 和式子1/3*3
现实中我们认为运算方式是一样的,按照逆波兰式的运算顺序,其实也应该一样。我对于无限循环小数都和计算器一样取小数点 后9位。可是前置算出来0.999999999后者是1。想咨询下后者是不是对内部进行优化特殊处理了。还有类似的情况举个例子介绍下~谢谢大家

4个回答

devmiao
devmiao   Ds   Rxr 2014.12.20 09:25

因为1/3对于C语言、C#和Java来说是整除
要写 1.0 / 3.0
或者(double)1/(double)3

u010794180
u010794180 我很想知道内部储存和运算顺序,可以进一步说明吗?我用java
大约 3 年之前 回复
mayh554024289
mayh554024289   2014.12.20 15:23

不知道你用的啥语言,反正C与C++都会得到0

bdmh
bdmh   Ds   Rxr 2014.12.20 15:40

这是浮点数运算的问题,首先浮点算存储就和其他数值不一样,然后而且计算的先后顺序也会导致误差的积累

u010794180
u010794180 我很想知道内部储存和运算顺序,可以进一步说明吗?我用java
大约 3 年之前 回复
zilaishuichina
zilaishuichina   Rxr 2014.12.22 11:09

lz贴一下具体代码吧, 这要看你取小数点后第9位,是怎么取的了,

如果(1/3)*3

其中的(1/3)你也取了第9位,那就变成了是 0.333333333 * 3, 这个是有精度丢失的

如果是 1/3*3 整个的结果取第9位, 那就是1.0000000000 取第9位, 还是1

u010794180
u010794180 首先谢谢你的回复。为什么1除以3乘以3会等于1.000000000,而(1除以3)乘以3就等于0.999999999?我以后的是有没有加括号其实都是先算1除以3,可是为什么结果不一样
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
cookie简单理解 //iOS和Android 有时候同样的请求方式 同样的接口 结果会不一样
cublas中执行矩阵乘法运算的函数 首先要注意的是cublas使用的是以列为主的存储方式,和c/c++中的以行为主的方式是不一样的。处理方法可参考下面的注释代码
tomcat虚拟目录的陷阱(不同的访问方式,不一样的结果)
定义分数类中<<和>>运算符重载,实现分数的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。
定义分数类中<<和>>运算符重载,实现分数的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。
《第九周任务一》定义Complex类中的《《和》》运算符的重载,实现输入和输出,改造原程序中对运算结果显示方式,使程序读起来更自然
第九周实验报告 任务2 定义Complex类中的<<和>>运算符的重载,实现输入和输出,改造原程序中对运算结果显示方式,使程序读起来更自然。
第九周实验报告任务3 定义分数类中<<和>>运算符重载,实现分数的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。
《第九周任务二》定义Time类中的<<和>>运算符的重载,实现时间输入输出,改造源程序中对运算结果的显示方式,使程序读起来更自然
第九周实验报告任务 1 定义Time类中的<<和>>运算符重载,实现时间的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。