游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2554|回复: 8

在3D游戏的数学类中都有这个EPSILON宏定义,我是这么认为

[复制链接]

14

主题

45

帖子

45

积分

注册会员

Rank: 2

积分
45
发表于 2005-11-1 11:11:00 | 显示全部楼层 |阅读模式
#define EPSILON 0.0001f

float x;

if( fabs(x)<=EPSILON )return 90.0f;


EPSILON 好象是一个最接近0的数的宏定义,看有的书上说好象是用来比较两个浮点数是否相等。

如果要比较两个浮点数是否相等,比如float a,b;  干脆用

if( a==b) .............不就行了吗,可是书上用的是:

if(fabs(a-b)<=EPSILON) .........

为什么弄出来一个什么EPSILON?整个全乱了,到底定义一个EPSILON宏有什么作用?我觉的有点多此一举。

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2005-11-1 11:31:00 | 显示全部楼层

Re:在3D游戏的数学类中都有这个EPSILON宏定义,我是这么认

基础不好。
float类型的运算误差你听说过吗?

85

主题

824

帖子

878

积分

高级会员

Rank: 4

积分
878
QQ
发表于 2005-11-1 11:31:00 | 显示全部楼层

Re:在3D游戏的数学类中都有这个EPSILON宏定义,我是这么认

什么叫多此一举,
本来比较浮点数就是应该用 if(fabs(a-b)<=EPSILON)这种形式的,
有空去看看高质量C/C++编程指南

33

主题

544

帖子

554

积分

高级会员

Rank: 4

积分
554
发表于 2005-11-1 11:42:00 | 显示全部楼层

Re:在3D游戏的数学类中都有这个EPSILON宏定义,我是这么认

晕死了,这属于基本的常识吧

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2005-11-1 12:03:00 | 显示全部楼层

Re:在3D游戏的数学类中都有这个EPSILON宏定义,我是这么认

不要这么说,什么知识都不是天生就会的,也不一定每种教材都会把这些东西说明白。
机器表示的浮点数是不精确的,只能保证一定的精度,哪怕是很有限位数的小数输入进去。
经过运算以后就误差就更大了,所以不能用等号来比较

2

主题

177

帖子

177

积分

注册会员

Rank: 2

积分
177
发表于 2005-11-1 12:18:00 | 显示全部楼层

Re:在3D游戏的数学类中都有这个EPSILON宏定义,我是这么认

浮点数是误差的,IEEE浮点数规定一个浮点所能达到的最小变化量是EPSILON这个宏所定义的值,3D游戏里边经过大量计算之后误差会逐渐累积,最后可能到达完全错误的地步,所以要用一些容差的处理
事实上好像你那本书也不太对,两个浮点数差是没法小于EPSILON的,应该用
#define FLT_EQUAL(a, b)  (! (fabs(a, b)>FLT_EPISILON) )

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2005-11-1 12:39:00 | 显示全部楼层

Re:在3D游戏的数学类中都有这个EPSILON宏定义,我是这么认

你们说现在的编译器会不会对if(a==b)这种写法进行处理,自动转成正确的形式呢。
浮点运算指令我不懂,没法试验唉

63

主题

871

帖子

891

积分

高级会员

Rank: 4

积分
891
QQ
发表于 2005-11-1 13:09:00 | 显示全部楼层

Re:在3D游戏的数学类中都有这个EPSILON宏定义,我是这么认

有些比较可以利用浮点的二进制格式来化为整数的比较

18

主题

573

帖子

573

积分

高级会员

Rank: 4

积分
573
发表于 2005-11-1 14:41:00 | 显示全部楼层

Re:在3D游戏的数学类中都有这个EPSILON宏定义,我是这么认

帮别人改个程序,用的是float,比较相同时还得用以上的方法。幸好他用的是C++ builder,里面有个Currency的数据类型可以在某些方面代替float,比如我给别人改的这个程序中。记得C#里面也有这个数据类型。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 11:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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