计算机进行小数运算会出错

float sum=0;

for(int i=0;i<100;i++)

  sum+=0.1;

System.out.print(sum);//10.000002

原因:计算机计算数字时,使用的是二进制,而十进制的0.1,无法用二进制精确表示,是一个二进制循环数,0.00011001100……(1100循环),而计算机对此二进制进行截取后,进行累加操作,必然会出现结果不对的情况。

时间: 2025-01-08 12:39:47

计算机进行小数运算会出错的相关文章

计算机进行小数运算时出错的原因和避免方法

计算机进行小数运算时出错的原因: 是因为有一些十进制的小数无法转换成二进制数. 如何地避免小数运算错误: 1.回避策略,即无视这些错误.根据程序目的不同,有时一些微笑的偏差并不会造成什么问题 2.就是把小数转换成整数来计算.计算机计算小数时可能会出错,但进行整数计算时一定不会出现问题.因此我们可以将小数暂时转换成整数在输出的时候再以小数的形式来输出 原文地址:https://www.cnblogs.com/hyy123-/p/10664879.html

三:计算机进行小数运算时出错的原因

0.开篇: (1)二进制数0.1,用十进制数表示的话是多少? 0.5 (2)用小数点后有3位的二进制数,能表示十进制数0.625吗? 可以,0.101 (3)将小数分为符号.尾数.基数.指数4部分进行表现的形式称为什么? 浮点数(浮点数形式) (4)二进制数的基数是什么? 2 (5)通过把0作为数值范围的中间值,从而在不使用符号位的情况下来表示负数的表示方法称为什么? EXCESS系统表示(EXCESS是“剩余的”的意思.例如,把01111111看作是0的话,比这个数小1的01111110就是-

第三章计算机进行小数运算时出错的原因

以前的我以为计算机是什么都可以做的不会出现什么错误,但我看完这一章以后我才知道,计算机在程序运行后无法得出自己想要的结果,就是十进制转换二进制时,出现了小数的情况 下边我可以通过这个例子就能看出来: #include <studio.h> void main() { float sum; int i; sum = 0; for(i = 1; i <= 100;i++){ sum+=0.1: } print f ("%f\n", sum); } 在这个程序中我们可以看到

匹夫细说C#:妥协与取舍,解构C#中的小数运算

题外话 正文开始之前,我首先要感谢博客园提供的这个优秀的平台.通过在这个优秀的平台上和很多志同道合的朋友交流,互相帮助,我也很荣幸的获得了15年的微软MVP的奖项.也使我更加坚信了代码改变世界.感激!感恩!努力!加油! 0x00 前言 慕容在生活和工作中常常会遇到一些十分迷信机器的人,他们之中很多人都相信机器是最理智的,没有任何感情,是真正的铁面无私,因此机器的运算所给出的答案总是正确的,如果答案错误,那么一定是操作机器的人的问题.但机器的运算就一定是正确的吗?事实上,机器出现运算错误并不是一个

js为什么不能正确处理小数运算?

js为什么不能正确处理小数运算? 发表于2016/1/17 13:27:34  638人阅读 分类: JavaScript 先看看下面的程序: var sum = 0; for(var i = 0; i < 10; i++) { sum += 0.1; } console.log(sum); 1 2 3 4 5 6 上面的程序会输出1吗? 在 你有必要知道的 25 个 JavaScript 面试题 一文中,第 8 个题浅显的说了下 js 为什么不能正确处理小数运算的问题.今天重拾旧题,更深层次的

计算机数制和运算的一点总结.

一.为什么会有10进制, 2进制,8进制,16进制? 10对我们来说是一个非常重要的数字.10是我们大多数人拥有的手指或脚趾的数目,因而我们人类已经适应了以10为基础的数字系统. 我们通常使用的数字系统称为以10为基础的数字系统或十进制.这个数字系统对我们来说非常自然,因而我们很难想像出还有其他的数字系统.如果人类不是有那么多只手指,我们数数的方式就会有所不同,数字10就可能代表别的东西了.当我们明白了10可以指只有两只鸭子的时候,也就可以解释开关.电线.灯泡.继电器(或干脆就叫计算机)是怎样表

小数运算需要注意什么? 接口和抽象类 WinForm窗体上两个panel,怎么实现一个panel固定漂浮在另一个panel之上

小数运算需要注意什么? 1. 生活中0.1+0.2=0.3, 计算机中可不是这样,为什么呢? 大家都知道计算机类型都是有数据范围的.整形int范围是 正负21亿左右,小数类型同样也是有范围的,但是即使0.1~0.2之前如果问你有多少小数? 无穷个!!! 那么有限的范围怎么表示无限的数据呢? 告诉你表示不了,只能存储一个无限接近的数. 另外大家都知道计算机所有数据都是二进制,0.5即 2的-1次方,0.25是2的-2次方,同样解释了为什么不能表达所有小数. 这样大家也就明白下面这个例子 100个0

JS操作小数运算,结果莫名其妙出现多位小数问题

Number类型: Number类型是ECMAScript中最常用和最令人关注的类型了:这种类型使用IEEE754格式来表示整数和浮点数值(浮点数值在某些语言中也被成为双精度数值),为支持各种数据类型,ECMA-262定义了不同的数值面量格式. 十进制: var intNum=10; //整数 八进制: var octalNum1=070; //八进制的56 var octalNum2=079; //无效的八进制数值-解析为79 八进制字面量在严格模式下是无效的: 十六进制: var hexNu

JS小数运算失精度的问题

浮点数值的最高精度是17位小数,但在进行运算的时候其精确度却远远不如整数:整数在进行运算的时候都会转成10进制: 而java和JavaScript中计算小数运算时,都会先将十进制的小数换算到对应的二进制,一部分小数并不能完整的换算为二进制,这里就出现了第一次的误差.待小数都换算为二进制后,再进行二进制间的运算,得到二进制结果.然后再将二进制结果换算为十进制,这里通常会出现第二次的误差. 所以(0.1+0.2)!=03 解决这种问题,可以将小数变成整数进行运算,然后再将结果变为小数. var ca