首页 > 其他分享 >计算机进行小数运算出错

计算机进行小数运算出错

时间:2024-01-26 17:22:05浏览次数:32  
标签:10 运算 浮点数 数值 出错 小数 计算机

一、计算机小数运算错误示例:将0.1累加100次也得不到10
下图是将0.1累加100次,然后将结果输出到显示器上的C语言程序:

二、二进制表示小数
小数点前面部分的转换只需将各数位数值和位权相乘,然后再将相乘的结果相加即可;小数点后面的部分将各数位的数值和位权相乘的结果相加即可。(位权是用来与各数字位的数字相乘的数值)
下面是二进制小数转换成十进制数的方法:

三、计算机运算出错的原因
正如下图所示:

计算机这个功能有限的机器设备,是无法处理无限循环的小数的。因此,在遇到循环小数时,计算机就会根据变量数据类型所对应的长度将数值从中间截断或四舍五入。
四、浮点数:(浮点数是指用符号、尾数、基数和指数这四部分来表示的小数)
表示小数的两种数据类型分别为双精度浮点数和单精度浮点数。其中,双精度浮点数类型用64位、单精度浮点数类型用32位来表示全体小数。
浮点数的表现形式:(由符号、尾数、基数、指数四部分构成)

双精度浮点数和单精度浮点数:
(一)双精度浮点数能够表示的正数范围是4.94065645841247×10~
1.79769313486232×10,负数范围是-1.79769313486232×10~~
-4.94065645841247×10。单精度浮点数能够表示的正数范围是
1.401298×10“~3.402823×10°,负数范围是-3.402823×10°~-1.401298×10”。不过,正如正文中所介绍的那样,在这些范围中,有些数值是无法正确表示的。
(二)像0.12345×10°和0.12345×10“这样使用与实际小数点位置不同的书写方法
来表示小数的形式称为浮点数。与浮点数相对的是定点数,使用定点数表示小数时,小数点的实际位置固定不变。例如,0.12345×10和0.12345×10用定点数来表示的话即为123.45和0.012345。

浮点数可以用不同的形式来表现同一个数值,例如:


五、避免计算机计算出错
首先是回避策略,即无视这些错误。根据程序目的的不同,有时一些微小的偏差并不会造成什么问题。一般来讲,在科学技术计算领域,计算机的计算结果只要能得到近似值就足够了。那些微小的误关完全可以忽略掉。
另一个策略是把小数转换成整数来计算。计算机在进行小数计算时可能会出错,但进行整数计算(只要不超过可处理的数值范围)时一定不会出现问题。因此,进行小数的计算时可以暂时使用整数,然后再把计算结果用小数表示出来即可。
将小数替换成整数来计算的C语言程序:

标签:10,运算,浮点数,数值,出错,小数,计算机
From: https://www.cnblogs.com/Li204217/p/17989833

相关文章

  • 被Null条件运算符摆了一道
    C#6.0引入了Null条件运算符:obj?.Invoke();等价于if(obj!=null)obj.Invoke();即遇到null时短路。于是,我不假思索地写下了这样的代码:①awaitobj?.InvokeAsync();遇到null时短路嘛,我以为是等价于这样:②if(obj!=null)awaitobj.InvokeAsync(); 于是乎,......
  • [转]使用 mathjs 解决 js 小数精度问题
    原文地址:使用mathjs解决js小数精度问题-公瑾当年-博客园很经典的例子是0.1+0.2!=0.3(实际等于0.30000000000000004)不等的原因机器中采用二进制存储数据,比如,35会被存储为:00100011(2^5+2^1+2^0)。0.375会被存储为:0.011(1/2^2+1/2^3=1/4+1/8=0.375)而对于像......
  • 运算符的关系简览
     C/C++运算符优先级 优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右--()圆括号(表达式)/函数名(形参表)--.成员选择(对象)对象.成员名--->成员选择(指针)对象指......
  • C++教程——初识C++(运算符)
    前一节我们初步认识出c++是一门面向对象的程序设计语言,并且我们初步认识了变量,数据类型,常量,输入输出以及合法的标识符命名规则,接下来我们要学习的是运算符。在c++中有逻辑运算符,赋值运算符,算数运算符,位运算符,关系运算符和杂项运算符。先从简单的算数运算符开始讲起,算数运算符简单来......
  • 【每日GIS算法】(1)二维矢量的运算
    二维向量的基础运算主要有以下几种矢量的加法矢量的减法矢量的乘法矢量的除法矢量的模矢量的点乘矢量的叉乘矢量的归一化针对不同的场景,我们为二维矢量类提供对应的实例方法,但是由于这些实例方法会修改对象内部的数值,因此还提供对应的静态方法,在不改变原来的向量的情况......
  • JS中的扩展运算符(...)和剩余运算符(...)
    一、概念在JS中,扩展运算符(spread)是三个点 (...) ,剩余运算符(rest)也是三个点 (...)二、扩展运算符(1)基本使用:扩展运算符的主要作用是将一个数组转为用逗号分隔的参数序列,它好比rest的逆运算//传递数据代替多个字符串的形式functiontest(a,b,c){console.log(a);//1......
  • (19)Powershell字符串合并运算符
    (19)Powershell字符串合并运算符Powershell提供了对字符串的合并运算符,连接运算符-join将一组字符串连接成单个字符串,子字符串按其在命令中出现的顺序添加到生成的字符串中。连接运算符Powershell中字符串的连接运算符的语法如下:-Join<String[]><String[]>-Join参数......
  • (18)Powershell中的字符串拆分运算符
    (18)Powershell中的字符串拆分运算符Powershell中提供了对字符串的拆分操作运算符。-split运算符将一个字符串拆分成多个字符串。拆分运算符拆分运算符用于将一个或多个字符串拆分为多个子字符串。可更改拆分操作的以下元素:(1)定界符。默认为空白,但是可指定字符、字符串、模......
  • [整理参考] CMD/DOS下运算符号的作用
    因关于DOS符号的总结很少,所以根据[1],经过几次整理之后,写了下面这个《CMD/DOS符号参考》,推荐新手好好看看,老手温习。标题:[整理参考]CMD/DOS下符号的作用参考作者:lxmxn[at]bbs.cn-dos.net时间:2007-5-27邮箱:lxmxn520[at]163.com说明:1、转帖请注明原帖出处属于中国DOS联盟(www.cn-do......
  • 异或运算的性质
    异或是一种基于二进制的位运算,用符号XOR或者^表示。性质1、交换律2、结合律:即(a^b)^c==a^(b^c))3、对于任何数x,都有x^x=0,x^0=x,x^1=x'。即一位数(假设是a),与自身异或,一定等于0; 与0异或-->等于本身;  与1异或---->等于a'。4、自反性A^B^B=A^0=A异或运算最常见于多项......