MATLAB的eps,浮点数相对精度

  MATLAB的eps函数,官方帮助文档是这么描述的:Floating-point relateive accuracy,也就是浮点数的相对精度。

  大家都知道,在数学中,实数有无穷多个,数值可以无限大,精度也可以无限小。而在计算机中,因为表示数值的字长有限,不可能无限地表示一个数的有效数字。所以在计算机中,是没有绝对概念上的无穷大和无穷小的。两个相邻数字(中间不能再有其他数值)的“间隔”,就是一般意义上的相对精度。(相对精度的具体含义可以自行Baidu,也可以参见这个帖子:关于Matlab的eps函数)。

  好,下面进入正题:

    我在查看eps的帮助文档时,发现文档中提到,eps的输出应该是:

2^(-52)

    当时我就不理解了,因为大家直接在MATLAB下面输出,结果肯定是:

2.2204e-16

    这不对啊。百思不得其解!有聪明的看官肯定知道我到底犯了什么错误。不过,当时我就是不明白,看了stackoverflow的这个帖子(What‘s the actual value of eps in Matlab?),才知道自己的问题,真是蠢到家了。因为大家只要这么写:

>> 2^(-52)

ans =

    2.2204e-16

    明白了吧!注意的一点是,如果这么写:

>> 2^(-52) == 2.2204e-16

ans =    0

    结果是不对的。因为计算机存储数值的问题,2.2204e-16在存储时,与2^(-52)是不同的,有误差。所以,结果显示二者不同。有经验的同学,应该在判断一个浮点变量是否为零的时候,碰到过类似的事情。注意在判断浮点数是否相等时,不能使用 “==” 符号。

  

  总之,碰到问题还是应该多想想,多试试。

MATLAB的eps,浮点数相对精度,布布扣,bubuko.com

时间: 2024-08-24 15:13:06

MATLAB的eps,浮点数相对精度的相关文章

PHP浮点数运算精度造成的,订单金额支付经常少1分的问题

最近碰见一个奇怪的问题,商城通过微信支付的订单经常少一分钱,经过排查是PHP浮点运算精度问题造成的 由PHP浮点数运算精度造成的,鸟哥的Bolg有详细的说明.http://www.laruence.com/2013/03/26/2884.html, 小数在二进制表示时,0.58对于二进制,是无限长的值 0.58的二进制表示基本上(52位)是: 0010100011110101110000101000111101011100001010001111 0.57的二进制表示基本上(52位)是: 001

js中浮点数的精度问题

JS中浮点数的精度问题 value = parseFloat((value.toFixed(2))).toLocaleString(); //大于1的数值没有问题,小于1的,个位数的0会丢失,如:0.1,转换之后:.1 function accAdd(arg1,arg2){ var r1,r2,m; try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0} try{r2=arg2.toString().split("

js中的浮点数运算精度问题

js中的浮点数精度一般可以达到16位有效数字,因此有人使用parseFloat(x.toFixed(12))来提高js中浮点运算的精度. 经验证,这种方法当整数位数较少时基本正确,但对于较大或较小的运算结果是无效的,如1222.31*2344,直接运算结果是2865094.6399999997,parseFloat((1222.31*2344).toFixed(12))后仍然是2865094.6399999997,并未提升精度. 此时,应该先将结果归一化后再进行toFixed(12)这样的处理,

【noiOJ】p8211 (PS:二分浮点数的精度问题)

05:派 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 我的生日要到了!根据习俗,我需要将一些派分给大家.我有N个不同口味.不同大小的派.有F个朋友会来参加我的派对,每个人会拿到一块派(必须一个派的一块,不能由几个派的小块拼成:可以是一整个派). 我的朋友们都特别小气,如果有人拿到更大的一块,就会开始抱怨.因此所有人拿到的派是同样大小的(但不需要是同样形状的),虽然这样有些派会被浪费,但总比搞砸整个派对好.当然,我也要给自己留一块,而这一块也要和其他人

关于js浮点数计算精度不准确问题的解决办法

今天在计算商品价格的时候再次遇到js浮点数计算出现误差的问题,以前就一直碰到这个问题,都是简单的使用tofixed方法进行处理一下,这对于一个程序员来说是及其不严谨的.因此在网上收集了一些处理浮点数精度的文章.觉得别人写的挺好了,我在简单的总结一下,以方便后续查阅. 浮点数误差产生的原因: 先看一个实例: 0.1 + 0.2 =? 0.1 + 0.2 = 0.3? 我们先来看一段 JS. console.log( 0.1+ 0.2); 输出为 0.30000000000000004.是不是很奇葩

golang 浮点数 取精度的效率对比

需求 浮点数取2位精度输出 实现 代码 package main import ( "time" "log" "strconv" "fmt" ) func main() { threadCount := 100000 fa := 3.233667 time1 := TestFn(threadCount,fa,func(fa float64) string{ return strconv.FormatFloat(fa,'f',2

js float浮点数计算精度问题

/** * floatObj 包含加减乘除四个方法,能确保浮点数运算不丢失精度 * * 我们知道计算机编程语言里浮点数计算会存在精度丢失问题(或称舍入误差),其根本原因是二进制和实现位数限制有些数无法有限表示 * 以下是十进制小数对应的二进制表示 * 0.1 >> 0.0001 1001 1001 1001…(1001无限循环) * 0.2 >> 0.0011 0011 0011 0011…(0011无限循环) * 计算机里每种数据类型的存储是一个有限宽度,比如 JavaScrip

Java中浮点数的精度问题 【转】

当您在计算Money的时候,请看好了!!!要不损失了别后悔!!! 现象1: public static void main(String[] args) { System.out.println(0.030*100);//输出3.0 System.out.println(0.031*100);//输出3.1 System.out.println(0.032*100);//输出3.2 System.out.println(0.033*100);//输出3.3000000000000003 Syst

JavaScript 浮点数运算 精度问题

JavaScript小数在做四则运算时,精度会丢失,这会在项目中引起诸多不便,先请看下面脚本. 1 //加减 2 <script type="text/javascript" language="javascript"> 3 alert(1/3);//弹出: 0.3333333333333333 4 alert(0.09999999 + 0.00000001);//弹出: 0.09999999999999999 5 alert(-0.09999999 -