当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 9 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 这是喳回事啊?100-100<>0 ?
帖子发表于 : 2007-10-26 13:18 

注册: 2007-02-15 6:26
帖子: 356
送出感谢: 0 次
接收感谢: 1
<?php
$a = 100.80;
$a += 100.00;
$a += -100.00;
echo 100.80-$a;
//结果输出:-1.4210854715202E-14
?>

但是把 $a=100.00 却是正常嗯。请指教。


_________________
2007:琉璃地,旃檀林。心心作。念念是。


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-10-26 13:22 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
浮点误差,正常的


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-10-26 13:29 

注册: 2007-02-15 6:26
帖子: 356
送出感谢: 0 次
接收感谢: 1
你就这么轻松把我打发了?

这跟 php 版本有关吗?好像一个HOLE ? 要查看所有的 PHP 页噢?汗人!


_________________
2007:琉璃地,旃檀林。心心作。念念是。


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-10-26 13:34 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
sqlfm 写道:
你就这么轻松把我打发了?

这跟 php 版本有关吗?好像一个HOLE ? 要查看所有的 PHP 页噢?汗人!


这是因为计算机储存浮点数的方式引起的
应该是编程常识啊..


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2007-10-26 13:41 
论坛管理员

注册: 2005-03-27 0:06
帖子: 10116
系统: Ubuntu 12.04
送出感谢: 7
接收感谢: 128
这是一个特例,由于 100.8 无法使用二进制来正确的表达,而反复被计算,加大了误差就形成了类似的结果。

这种数字还有很多,例如: 2.97 8.03 等等。


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2007-10-26 13:44 

注册: 2007-02-15 6:26
帖子: 356
送出感谢: 0 次
接收感谢: 1
oneleaf 写道:
这是一个特例,由于 100.8 无法使用二进制来正确的表达,而反复被计算,加大了误差就形成了类似的结果。

这种数字还有很多,例如: 2.97 8.03 等等。


哇!你这么牛啊。

那我写了几年的 PHP 都凑巧给我过了噢。IT 这一行真是越作越笨了我。


_________________
2007:琉璃地,旃檀林。心心作。念念是。


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2007-10-26 13:45 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
如果小数部分可以刚好化为2进制的有限小数,且所有有效数字长度不超过浮点类型规定的长度,就可以无误差
例如 0.25(10)=0.01(2)=1.0(2)* 2^-2


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2007-10-26 13:52 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
所以判断浮点值是否相等, 一般来说都要用三出口函数

int cmp(float a,float b){
if ( abs(a-b)<某个很小的值 ) return 0;
if (a>b) return 1;
if (a<b) return -1;
}


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2007-10-26 14:42 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
就算你不加100也不减100,也会出这样的错吧.


_________________
关注我的blog: ε==3


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 9 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译