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

问题描述

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

今天自己实现了一个计算器,也用来系统的计算法,发现有个奇怪的东西。
(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

计算器-为什么同样的运算方式结果不一样,内部怎么处理的。的相关文章

普通计算器--能够自己写入相关运算方式程序--请问大神们,有什么好的建议。

问题描述 普通计算器--能够自己写入相关运算方式程序--请问大神们,有什么好的建议. 日常中用的普通计算器,能够进行加减乘除的就行.可以自己烧录相关程序. 解决方案 你到底问什么问题?是你希望购买一个可以编程的计算机,还是你希望自己开发这样的设备,或者是你希望写一个程序模仿计算器? 解决方案二: 单片机+液晶屏+键盘.这应该算是嵌入式了吧. 解决方案三: 直接再重新用单片机控制设计一个计算器, 解决方案四: 1+2*3=9还是7.

JS两种定义方式的区别、内部原理_基础知识

相信两种方式大家都用过,但未必所有人都知道其 区别,内部原理. 复制代码 代码如下: // 方式1 function func1(x,y){ // your code } // 方式2 var func2 = function(x,y){ // your code } 方式1 是典型的函数声明(Function declarations). 方式2 是函数表达式(Function expressions),将一个匿名函数赋值给一个变量.或者说方式2中创建了一个具有形参为x,y的匿名函数,然后把该

妙用Windows 7系统的时钟和计算器

Win7的每个细节都反映了它的优越性,比如时钟和计算器,虽然看起来不起眼,并且在每个版本的Windows中都少不了它们的身影,但是在Win7系统中它们更别有玄机哦! 首先,让我们一起探探Win7系统时钟的玄妙之处.跟其他的Windows系统不一样,Win7不再单纯的在屏幕右下角显示系统时间,更能够同时显示多个时区的时间,对于经常出差,也许今天在中国,明天就在纽约的用户来讲,这个功能带来的服务不是一般的贴心! 我们只需要做简单的设置!鼠标左键单击时间显示区域,在弹出的对话框中单击"更改日期和时间设

java中变量运算细节 (2)

/* 目的:测试变量的运算方式 结果:byte a, b, c;        a = b+c;        或者 a = b+10        形如这种形式的算式, 等式的右边的运算结果默认的都是int型的!因为等式右边有变量, 编译器无法确定变量的内容        ,因为它是变量!所以相加之后得到的int再默认强制转换成byte可能会损失精度.        而形如 a=4+5:这种常量的赋值,虽然 4 和 5 都默认的是int, 但都是常量,它们的值是确定的!所以如果 4+5的值超过

《鸟哥的Linux 私房菜 基础学习篇(第三版)》——0.3 数据表示方式

0.3 数据表示方式 鸟哥的Linux 私房菜 基础学习篇(第三版) 事实上我们的计算机只认识0与1,记录的数据也是只能记录0与1而已,所以计算机常用的数据是二进制的.但是我们人类常用的数值运算是十进制,文字方面则有非常多的语言,常用的语言就有英文.中文(又分繁体与简体中文).日文等.那么计算机如何记录与显示这些数值/文字呢?就得要通过一系列的转换才可以啦!下面我们就来谈谈数值与文字的编码系统. 0.3.1 数字系统 早期的计算机使用的是利用通电与否的特性的真空管,如果通电就是1,没有通电就是0

内存共享,多服务器联合 运算 这样做可行吗

问题描述 1.有一个内存共享服务器.负责多服务器之间的数据通信2.线程择优创建.例如A.B两台服务器,如果A服务器有100个线程在运行,那么如果需要继续创建线程,则在B服务器创建线程但是这样算网卡不够,例如创建线程需要一个参数这个参数就20M,那么传给运算服务器就要消耗20M网络,那么如果这样联合,需要超级网卡和超级交换机支持,如果这点能做到就行,一般的按照一个计算机64G内存,为8G一根的DDR3代内存条算的话就是1333*8=10664G内存,如果10台这样的服务器联合,峰值就需要10*10

笔记 - Java 进制和位运算

二进制:只有0和1组成的一组数成为二进制数,计算机中的数据都是以二进制形式进行存储的.     通常一个二进制数最高位是1,那么对应的十进制数为负数,如果最高位是0,那么对应的数是正数      八进制:一个二进制数表示成八进制数,将该二进制数从右到左每三位一组,每一组算出对应的十进制数,     每组对应的十进制数连起来就是八进制表现形式.八进制表现形式最高是7      十进制:常用的数都是十进制数. 十六进制:0-9,a-f或A-F的表现形式,a-f表示的是10-15     一个数表现为

通过SQL Server的位运算功能巧妙解决多选查询方法_MsSql

无论使用int还是varchar,对于Status的多选查询都是不易应对的.举例,常规思维下对CustomerStatus的Enum设置如下: 复制代码 代码如下: [Serializable] public enum CustomerStatus { New = 0, Active = 1, Overdue = 2, Suspended = 3, Closing = 4, Closed = 5 } 在数据库中以int形式存储了Status值. 如果我在页面中想一次搜索状态为Active,Ove

惠普推出新型图形计算器,支持多点触控

根据 Gizmodo 的消息,日前惠普推出了一款新型图形计算器 http://www.aliyun.com/zixun/aggregation/3436.html">Prime.这款计算器乍一眼看上去,有点像是几年前保时捷和 BlackBerry 合作推出的 P'9981 手机. 据悉,这款计算器运用了金属拉丝工艺,采用 3.5 英寸屏,支持多点触控和彩色显示,可以运行一些不同的应用.当然这些应用跟打电话和发邮件等功能无关,只能帮助人们可以更好地进行运算. Prime 采用的是锂电池,保证