计算机最大整数只能算整数了怎么办

计算机是怎么存储数字的 - 简书
计算机是怎么存储数字的
从一个最简单的例子开始吧。
我们来做几个小学生的加法题。8 + 9 等于多少?0.8 + 0.9 等于多少?在 Chrome 里面简单用 Javascript 这门语言简单测试一下,我们得到的结果是:
8 + 9 = 17
0.8 + 0.9 = 1.0002。
是的,你没有看错,计算机给出了 1.0002 这个答案。难道计算机错了吗?
计算机错了,又没错。为什么呢?因为计算机是用二进制来表示这些数字的,有很多数在计算机里面是没法精确表示的。先来看看什么是二进制。
十进制、二进制
我们都知道,计算机只能懂 0 和 1,也就是说计算机里面所有的数字,都是二进制形式的。那么一个普通的数字,用二进制的形式究竟该如何表示呢?譬如:
78 如何使用二进制表示?
对于正整数,数学上有一个转换的公式,就是「除 2 取余,逆序排列」法。具体做法是:用 2 整除十进制整数,可以得到一个商和余数;再用 2 去除商,又会得到一个商和余数,如此进行,直到商为 0 时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。对于 78 这个十进制整数来说,对应的二进制是 1001110.
0.5 如何使用二进制表示?
对于纯小数,也有一个固定的转换法:乘 2 取整,顺序排列。具体做法就是:用 2 乘十进制小数,可以得到积,将积的整数部分取出,再用 2 乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,此时 0 或 1 为二进制的最后一位。对于十进制的 0.5 来说,对应的二进制表示就是 0.1
8.5 如何使用二进制表示?
好了,有零有整的小数,在计算机里面怎么表示呢?可能大家已经知道了,分成整数和纯小数两部分,分别转换,然后相加起来。那么 8.5 的二进制形式可以表示为:1000.1
好了,这是基础,后面的内容就开始慢慢接近计算机的工作模式了。
二进制能准确表示十进制数字吗
首先看这个问题:
0.1 这个小数,用二进制该如何表示
按照前面的转换规则,我们先看看看 0.1 怎么表示:
0.1 * 2 = 0.2
---- 0 (1)
0.2 * 2 = 0.4
---- 0 (2)
0.4 * 2 = 0.8
---- 0 (3)
0.8 * 2 = 1.6
---- 1 (4)
0.6 * 2 = 1.2
---- 1 (5)
0.2 * 2 = 0.4
---- 0 (6)
算到这里,我们得到了 0.000110 这样的一段二进制串,但是不能再算下去了,因为我们看到第 6 行和第 2 行完全一样,再计算就一直循环下去了。所以,0.1 这样一个十进制小数,在计算机的二进制里面根本没法精确表示。
思考一下,0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9 这 9 个小数,有几个是可以精确表示的?
精确表示 Vs 精确显示
通过前面的代码我们知道,0.8 + 0.9 的结果,计算机并不能精确表示,但是我们在 Javascript 中定义这样一个数值变量
var ha = 1.7
在控制台打印的话,结果又确实是 1.7。
好像很矛盾。显然,通过后面的例子可以知道 Javascript 可以精确显示 1.7(哪怕 1.7 不能被精确表示),这不是和最开始我们的结果矛盾吗?
其实这是一个想当然的错误。在直观上我们认为 0.8 + 0.9 = 1.7 是必然成立的(数学上确实如此),而且 1.7 又能被精确显示,那最开始的结果就应该等于 1.7,对不对?
而实际上,在计算机里 0.8 + 0.9 根本不等于 1.7(什么?)!因为 0.8 和 0.9 都不能被精确表示,数值的精度丢失在了每一个环节,而不是最后的结果上。
我们可以用数学中四舍五入的概念类比一下。我们计算 1.6 + 2.8 保留整数,我们觉得结果应该是 4(4.4 舍入)。但是我们用另一种方法:先把 1.6 舍入成 2,再把 2.8 舍入成 3,最后得到 5。通过不同的运算,我们得到了完全不一样的结果!所以,在 0.8 + 0.9 的运算中,参与运算的两个数精度一开始已经丢失了,所以他们的结果也不再是 1.7 了。
看到这里,我们是不是要怀疑计算机的一切结果了?连几个小数都无法精确表示的话,其他数值计算结果如何保证准确呢?其实,大家不用担心,计算机在做浮点运算的时候,常常会因为无法精确表示而进行近似或舍入,而其结果在我们日常生活所需的精度范围内,都还是准确的。
刚才说到了浮点运算,照字面的理解就是浮点数的运算了。但是,浮点数是什么呢?计算机里面是怎么表示这些数字的呢?
浮点数是什么
为了弄清楚浮点数,我们需要先看定点数。所谓定点数,是计算机中采用的一种数的表示方法,参与运算的数的小数点位置固定不变。那么小数点位置可变的自然就是所谓的「浮点数」了。这里要先澄清一个概念:浮点数并不一定等于小数,定点数也并不一定就是整数;整数和小数是我们小学数学中使用的,在计算机的世界里,只有定点数和浮点数。
小数点位固定在最后一位之后称为定点整数。若机器字长为 8 位,那么它能表示的整数范围是 -127 - 127(考虑正负数的符号)。例如 0111 表示 7。
小数点固定在最高位之后称为定点小数。若机器字长为 8 位,数值表示范围是[-(1-2^(-7)), 1-2^(-7)]。例如 1111 表示 -0.875。
在计算机的硬件中是没有小数点这个东西的。CPU 能处理的东西都是整的。所以,小数就要用类似科学计数法的方式来表示。如 1.234 在计算机里面,可以理解成用 1234 和 -3 两个整数来表示:1234 * 10 的 -3 次方,这类数就叫「浮点数」。当然,计算机里面的浮点数是二进制的。任意一个二进制浮点数 V 都可以表示成下面的形式:
V = (-1)^s x M x 2^E
(-1)^s 表示符号位,当s = 0,V 为正数;当 s = 1,V 为负数;
M 表示有效数字,必须大于等于 1、小于 2;
2^E 表示指数位。
举例来说,十进制的 5.0,写成二进制是 101.0,相当于 1.01 x 2^2。那么按照上面的格式,可以得出 s = 0, M = 1.01, E = 2。
CPU 在处理这类数的运算时需要比整数运算复杂得多的电路设计,且速度比整数运算慢很多(所以很多年前,浮点运算能力是衡量 CPU 性能的重要指标)。
浮点数的更多问题
历史上计算机科学家们曾提出过多种解决方案,最终获得广泛应用的是 IEEE 754 标准中的方案。IEEE 754 规定,对于 32 位的浮点数,最高的 1 位是符号位 s,接着的 8 位是指数 E,剩下的 23 位为有效数字 M:
32 位浮点数的分段表示
IEEE 754 对有效数字 M 和指数 E,还有一些特别规定。
前面说过,1≤M&2,也就是说,M 可以写成 1.xxxxxx 的形式,其中 xxxxxx 表示小数部分。IEEE 754 规定,在计算机内部保存 M 时,默认这个数的第一位总是 1,因此可以被舍去,只保存后面的 xxxxxx 部分。比如保存 1.01 的时候,只保存 01,等到读取的时候,再把第一位的 1 加上去。这样做的目的,是节省 1 位有效数字。以 32 位浮点数为例,留给 M 只有 23 位,将第一位的 1 舍去以后,等于可以保存 24 位有效数字。
至于指数 E,情况就比较复杂。
首先,E 是没有符号的。这意味着,如果 E 为 8 位,它的取值范围为 0~255;但是,我们知道,科学计数法中的 E 是可以出现负数的,所以 IEEE 754 规定,E 的真实值必须再减去一个中间数(偏移值)。IEEE 754 标准规定该固定值为 2^(E-1) - 1,对于 8 位的 E,这个中间数是 127。
比如,2^10 的 E 是 10,所以保存成 32 位浮点数时,必须保存成10+127=137,即 。
然后,指数 E 还可以再分成三种情况:
E不全为 0 或不全为 1。这时,浮点数就采用上面的规则表示,即指数 E 的计算值减去 127,得到真实值,再将有效数字 M 前加上第一位的 1;
E全为 0。这时,浮点数的指数 E 等于 1-127,有效数字 M 不再加上第一位的 1,而是还原为 0.xxxxxx 的小数。这样做是为了表示 ±0,以及接近于 0 的很小的数字;
E 全为 1。这时如果有效数字 M 全为0,表示 ±无穷大(正负取决于符号位s);如果有效数字M不全为0,表示这个数不是一个数(NaN)
浮点数表示范围与表示个数
对于计算机来说,浮点数可表示的范围相当大,但这并不等于表示个数。从数量级分析一下,32bit 浮点数的表示范围是 10 的 38 次方,而表示个数呢,是 10 的 10 次方。 能够被表示的数只有 1/…. (大概有30个零)。
总之,计算机中数字的存储、表示、计算是非常复杂的,涉及到的内容,都够单独出一本大部头的书了,大家有兴趣可以自己找资料深入研究一下。
在编程中我们总要进行一些数学运算以及数字处理,尤其是浮点数的运算和处理,这篇文章主要介绍C语言下的数学库。而其他语言中的数学库函数的定义以及最终实现也是通过对C数学库的调用来完成的,其内容大同小异,因此就不在这里介绍了。C语言标准库中的math.h定义了非常多的数学运算和数...
前言 最近在看《Computer System: A Programmer's Perspective》,学会了很多基础性的知识,于是总结出来与大家分享。 位与二进制 在现实生活中,我们会用纸和笔来记录数据,比如在之前智能手机还没有普及的年代,还有相当一部分人使用小本本来记...
背景 在java中float赋值给double,会产生精度问题。 输出为2.5684。 小数的二进制表示问题 首先我们要搞清楚下面两个问题: 十进制整数如何转化为二进制数 算法很简单。举个例子,11表示成二进制数: 11/2=5 余
IEEE 754 表示:你尽管抓狂、骂娘,但你能完全避开我,算我输。 一、IEEE-754浮点数捅出的那些娄子 首先我们还是来看几个简单的问题,能说出每一个问题的细节的话就可以跳过了,而如果只能泛泛说一句“因为IEEE754浮点数精度问题”,那么下文还是值得一看。 第一个问...
从上个月开始直到前几天连绵不断的阴雨天气完全没有停止过,让我本打算清理花园的计划一直搁浅。这两天总算是盼到了天晴,于是趁着休息跑过去好好整理一番。前段时间网购的绿萝和多肉恰巧也到了,正好该移栽的移栽,该换盆的换盆。看来,今天我这个老农民又有事情要忙碌啦,等忙完后估计又得腰酸...
4月1日,第三方网贷资讯平台发布的《中国P2P网贷行业2017年3月月报》显示,2017年3月P2P网贷行业的成交量为2508.43亿元,创出单月历史新高,环比2月上升了22.76%。历史累计成交量更是突破4万亿,达41052.69亿元。由此可见,中国P2P网贷行业...
这几天感冒咳嗽,喉咙疼,简直是快要死的节奏,生活每天都在进行,这几天睡得太迟皮肤好差,在教一个姐姐学习,这两天也没有太多人工作也不是太累,马上就要去学校了,不知道见不了他,当一个人伤你很多次之后也就会对他无所谓了。珍惜现在自己的一切,努力工作。
“知止而后有定,定而后能静,静而后能安,安而后能虑,虑而后能得。” ——《大学》
大家好,我是一枚80后奶爸,关于如何应对宝宝发烧是每一个父母的必修课。如何得知宝宝是否发烧了,最靠谱的应该就是测体温了。测体温的工具有很多,今天就来吐槽一下各类麻麻们常用的工具。
首先普及一下可以测量体温的都有哪一些部位,按照准确度排序: 1. 肛门,最精确,可测到体内温...为什么电脑上算出来的数字和计算机算的不一样_百度知道
为什么电脑上算出来的数字和计算机算的不一样
计算机算出来的结果是96219.88,为什么,到底哪错了,有什么办法可以一样。
我有更好的答案
如果是多位小数,或者计算过程会产生多位小数,确实会出现你说的这种情况,那是数据在转化为二进制的时候位数决定了其转换精度,而电脑和计算器显然位数不一样,取的精度也不一样,最终最后一个位数和取的保留小数之间,便会由四舍五入而影响到保留的数值。
看您算的这个应该是财务的钱,应该是一个求和吧(中间不会产生多位小数),都是两位小数,两位无论是计算器还是电脑,都不会用到完全的小数位数,所以肯定是您某个地方错了,输入错误。
另外据我目测最后一位,是不是您给的数据不全,都不是7或者8呀。
采纳率:58%
首先提醒你注意:应该是计算“器”,不是计算“机”。计算机就是电脑。其次,你这些数据应该是电脑EXCEL表里的吧。金额这一栏应该是根据前面的数据经过一组公式、算法计算出来的,而不是手动计算完填上的,对吧?所以,你金额这一栏每行都是2位小数,这个2位小数都是经过四舍五入的,例如:10367.60实际上可能是(仅仅是个举例,不要太较真。)因为你把这个格的格式设置成了“数字、保留2位小数”,所以显示是10367.60,而最后这行你用的是“自动求和”公式,它会根据实际的数据()来进行计算,多行之后,你就发现最后这行比你用看到的数据进行计算器计算的得数小了0.02。这是因为你上面这些行的数据里四舍五入的太多了,估计大多数都是入,没几个舌的造成的。
你把数据放到EXCEL里面自动计算就对了。正确结果是96219.89我用的是EXCEL2003和IPHONE4S里的计算器,结果是一样的。
你表格上面的金额是不是在小数点后面还有位数只是没有显示出来,如果这样就会有误差的,你只算到了小数点后两位,但是电脑是按照你小数点后面的所有数字加总的。
如果是两种方法计算的结果或过程中的数据类型或小数点取值位数不一样,那么得到的结果就会不一样。例如两个浮点数相加运算,3.6+8.2,如果一次计算的取值结果为整数12,另外一次计算的取值结果为浮点数是11.8,那么得到的结果就会不一样,另外如果结果有多位小数,小数点后取值位数不一样也会导致结果不同。
计算器上只能保存12位电脑上的计算器可以保存更多,就可能不一样哦
其他5条回答
为您推荐:
其他类似问题
计算机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。计算器小数点的设置我的计算器,注意是计算器,不是计算机在我借给别人以后,现在他只能整数运算了,我要算的东西全都是带几
计算器小数点的设置我的计算器,注意是计算器,不是计算机!在我借给别人以后,现在他只能整数运算了,我要算的东西全都是带几位小数的,也是要求要保留几位小数的!现在说明书也找不到了!满意答案(没有说明计算器型号,无法提供具体按键)在MODE或SETUP里找到NORM,选择后提示NORM 2 ,随便选一个.(一个是十为以上小数以科学记数法显示,一个是四位以上(好象是四位)).
更多相关文章
计算器小数点的设置我的计算器小数点不能显示,显示的全是整数,上面有一个类似d(没有小尾巴,似乎有人念作得尔塔)的符号,我已试用过MODE与FIX及上档键NORM键,但还无法消除d这个符号,急用!满意答案看显示屏靠左边的上面 显示0 则是整数 显示2 是保留2位小数..依次类推pizza2852014 ...
帮出初中数学计算题30道有理数的加减法混合运算要得数容易算的最好追20带上过程得数追309点之前发上来满意答案1.计算:(1)-5-9+3: (2)10-17+8:(3)-3-4+19-11: (4)-8+12-16-23.2.计算:(1)-4.2+5.7-8.4+10: (2)6.1-3.7-4. ...
计算器小数点变逗号怎么调整回来呢那恢复出厂设置键在哪里呢满意答案卡西欧一般是shift93=ACftvtyxnq 个其它回复重按吧szh-06
再怎么把计算器小数点多保留几位满意答案这个要看你用的是什么计算器咯 一般的台式计算器在左上方有个键用来调节小数点的如果是科学计算器就不样了咯 自己设置多小位都行咯笨笨RUlu
java编个计算器怎么在加入小数点我用JAVA语言编了个计算器但是怎么弄也不能在数字后面加个小数点例如82 我想显示出&82.&却不能 还有负号总是在数字的后面 按正常应该在数字的前面的 如我要的是&-82& 却显示出&82-&满意答案我做 ...
科学计算器怎么用啊?我买了个科学计算器不会用,算小数点的时候算出来成了分数,我不知道是怎么回事,满意答案按括号旁边的S-D键,实现转化橙duvaz-09
计算器小数点保留位数如何更改?我的计算器是卡西欧82ms,不知道按到哪个键子变成小数点只保留一位了.比如4.12-0.1=4.0而不是等于4.02,请问该怎么更改?或是哪里有它的说明书?满意答案先按3下MODE 再按1最后选择保留数位佳3_-20
科学(函数)计算器小数点没有了怎么回事?打入0.2,只能打入02,小数点打不上了,是健坏了吗?这种计算器能修吗?满意答案按键下面的导电物质没有了,类似遥控器失灵.拆开检修.TKsAtlas2RqV 个其它回复额 那肯定是按键坏了... 看看是不是电路板问题赵子龙立2014-10 ...
如何制做数学手抄报希望在日前告诉我!超急!满意答案随便顶几个小标题(大标题自己定啊)小标题:1.数学天地(出数学题)2.数学名人(写几个名人,介绍介绍)3.难题解答(随便抄几个公式在上面,在加上几个 ...
关于春天的作文!(200字)满意答案先采纳,马上发给你末日审判丶悍遽9
几个简单的化学题 求答案与解题过程氯酸钾与二氧化锰共热时,取用4.1克氯酸钾,1克二氧化锰,完全反应后剩余固体1.9克(2)求剩余固体中KCl的质量(3)求生成氧气的质量 第二题:若有50克大理石,提纯得到40克碳酸 ...
关于建筑打桩标高,护筒标高算对了,那个桩面标高也对的,护筒和桩面,这段距离就是吊筋的长度,但是那个吊筋搞错了30公分,现在已经浇了混泥土,我想知道那个以后的结果,是混泥土高(底)30公分,还是吊筋短(长)30公分,满 ...
满意答案红树林(Mangrove),是一种稀有的木本胎生植物.所谓的红树林是指由红树科的植物组成,组成的物种包括草本.藤本红树.它生长于陆地与海洋交界带的滩涂浅滩,是陆地向海洋过度的特殊生态系统,属于湿地生态系统.2 ...
满意答案汶川大地震作文 &地震来了!大家快往外跑.&我仿佛又一次清楚的听到人们的呼喊声.那是一个晴朗的日子,我们正在专心致志地听老师讲课时,忽然,我感到头晕,只见头顶上的电灯不停地摇晃,课桌上的笔 ...
It doesn't matter是用来回答Thank you还是回答Sorry的?满意答案多作对不起.ycycrfv58859
一质点做匀加速直线运动,在第2S内的位移是3M,在第5S内的位移是7m求质点的加速度和3.5s末的速度满意答案设第5S内的位移是S5,第2S内的位移是S2,根据题目意思知道相同的时间间隔为T=1sa=(S5-S2)/ ...
1/(2x)怎么求导要分步满意答案1/2是系数 常数 所以真正要求的是1/X的导数 1/x=x的-1次幂 x的n次幂的导数就是n*x的(n-1)次幂 1/X的导数 就是-1*1/x?1/(2x)的导数是-1/(2x? ...
mastercam指定位置下刀满意答案以前有回答过这问题了,先在要下刀的位置画个点,然后串联要加工的部分完了以后再来点这个点,就会淡出刀具选择框了,要是不明白的话再找找看,我之前有回答了,而且有图片,忘记在哪了wvE ...手用计算机怎么老取整数啊_百度知道
手用计算机怎么老取整数啊
我用的是深南雁cz1206f型号计算机,小数老取整数,郁闷,说明书掉了,不知道怎样调回来,请大家教下
在线等 加分号是哪个键
我有更好的答案
为您推荐:
其他类似问题
计算机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 计算机随机整数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信