声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: sssssxxxxx921

[其他相关] 看看这个等于零的问题

[复制链接]
发表于 2007-8-20 09:43 | 显示全部楼层

回复 #15 sssssxxxxx921 的帖子

呵呵,其实也不会太牵强了,主要还是计算机自身计算能力的一种体现嘛!
回复 支持 反对
分享到:

使用道具 举报

发表于 2007-8-20 09:46 | 显示全部楼层

回复 #15 sssssxxxxx921 的帖子

为什么不是零,可以肯定是误差在作怪。不管是否牵强,书上就是这么解释的。应该是有道理的
顺序对有效位数的影响:
>> format long
>> (1.0799+0.0381)-(0.3686+1.2376)+0.4882

ans =

    5.551115123125783e-017
楼主在4楼给的结果是:
0.0381-0.3686+1.0799-1.2376+0.4882

ans =

  5.5511e-017

大概损失了10多位的有效数字
正在找可以等于零的方法、、、、

评分

1

查看全部评分

发表于 2007-8-20 09:50 | 显示全部楼层
找到了
>> format long
>> a=1.0799+0.0381

a =

   1.11800000000000

>> b=a+0.4882

b =

   1.60620000000000

>> result=b-(0.3686+1.2376)

result =

     0
说白了还是截断和舍入误差在作怪
发表于 2007-8-20 09:53 | 显示全部楼层
最后在牢骚一下,书上的一些基础研究可信度还是有的:lol。书上既然有对有效数字位数和绝对误差的分析说明,也是有道理的。同样一个计算式子分布计算可以得到零,而连在一起就不是零。确实有些奇怪,这是数值计算难以避免的误差。如果想精确就需要自己设计不同的方法(比如这个例子)。在matlab曾经有一个版友问过这个问题sin(0)的结果是零,但是sin(pi)确不是(可以试试看,想想为什么呢?)。其实也很简单,pi是个什么数呀?那可是无限小数啊。计算机能准确表达么?所以结果只能是近似解,和理论解0存在误差是必然的。想让sin(pi)为零也有很多不同的方法,感兴趣的可以看一下这个帖子:
sin(pi)不等于0
感谢2位版主的鼓励,特别是小咕姐的信任:loveliness: ,以后俺们版有事也找你们

[ 本帖最后由 花如月 于 2007-8-20 10:06 编辑 ]

评分

1

查看全部评分

发表于 2007-8-20 10:09 | 显示全部楼层

回复 #19 花如月 的帖子

^_^,版块之间要互相交流,版主之间更要相互交流啊
花如月有时间记得常过来看看
 楼主| 发表于 2007-8-20 10:41 | 显示全部楼层
谢谢你的详解   这些我也猜到一点点   
只是很好奇   也很想知道计算机是怎么进行舍入计算的  想知道中间过程  可懒得查资料  呵呵
发表于 2007-8-20 10:42 | 显示全部楼层
大家讨论浮点数的,可能存在计算机舍入误差问题。但是整数的,还有一个有意思的:
0=0+0+0+0.......
0=(1-1)+(1-1)+(1-1)+(1-1)+.......
1-1+1-1+1-1+1-1+.........≠0

评分

1

查看全部评分

发表于 2007-8-20 15:43 | 显示全部楼层
关于这个误差讨论确实是蛮有意思和意义的

都知道是计算机计算时有效位数以及截断误差造成的原因,但是原理还是有点模糊的,花如月上面总结的还是很好的,也希望大家继续讨论讨论这个话题!争取得到一些有意思的结论哦!
发表于 2007-8-20 16:23 | 显示全部楼层
这个还是软件本身的问题,通过设置是可以消除的
在计算中注意设置问题应该没问题
不过还是很喜欢讨论这类有意思的东西
 楼主| 发表于 2007-9-3 17:12 | 显示全部楼层
计算机中存储数据都是以2的K次幂来输入的,所以才会显示上述的误差现象
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-19 17:10 , Processed in 0.097367 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表