游戏开发论坛

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

谁能帮我解决,我叫他 爹.....

[复制链接]

2

主题

13

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2003-12-18 10:33:00 | 显示全部楼层 |阅读模式
double x;
x=1;
x/=3;
x/=5;
x/=7;
x/=11;
反过来
x*=11;
x*=7;
x*=5;
x*=3;
/*
/*
   x 应该是1, 不过因为浮点误差 变成0.999999*********.....
有些工业用软件精度要求是小数点一下 n个位置,
那浮点有误差,自己设计浮点变量又无法利用fpu,速度肯定慢,
那就算不要速度,只要精确度,这个如何解决,如何设计,什么方法??????
只要是 可以用的方法,本人愿意洗耳恭听,
*/
*/
sf_20031218103320.jpg

0

主题

130

帖子

130

积分

注册会员

Rank: 2

积分
130
发表于 2003-12-18 10:53:00 | 显示全部楼层

Re:谁能帮我解决,我叫他 爹.....

这是因为除不尽,结果是无限循环小数造成的。精度无论高到什么程度最后一位的缺失是不可避免的。
简单的例子 1/3=0。3333333333333333333 再乘以3总是不可避免的最后一位的精度丢了。
解决的方法之一,是用分数形式来表达无限循环小数。
事实事实上小数点一下 n个位置的精确DOUBLE的精度是够的。只不过有时在输出时截掉了。毕竟DOUBLE有54个有效位。

2

主题

13

帖子

19

积分

新手上路

Rank: 1

积分
19
 楼主| 发表于 2003-12-18 11:21:00 | 显示全部楼层

Re:谁能帮我解决,我叫他 爹.....

不错,
你的意思是 int a,b;//a存储分子,b存储分母,然后  ...经过一系列操作完成..

不过整型上限是 0xffffffff,而 浮点上限是 2的(2进制11位max)方....
就算用unsigned long,价码也差太多了.
如果用分数形式 的话, 它的数值 上限和下限会 大打折扣 ,如何解决?

2

主题

13

帖子

19

积分

新手上路

Rank: 1

积分
19
 楼主| 发表于 2003-12-18 11:39:00 | 显示全部楼层

Re:谁能帮我解决,我叫他 爹.....

唉,想到了.

不过还没有完善的处理方法

0

主题

8

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2003-12-18 12:05:00 | 显示全部楼层

Re:谁能帮我解决,我叫他 爹.....

你不是都已经知道了它是整数吗?
x = floor(x + 0.5);

hehe, 可能我理解错了你的意思

3

主题

56

帖子

56

积分

注册会员

Rank: 2

积分
56
发表于 2003-12-18 13:25:00 | 显示全部楼层

Re:谁能帮我解决,我叫他 爹.....

这类问题通常称为:Exact Arithmetic 或者 Exact Compuation

其目的就是在有限的机器精度下,完成“精确”的几何/代数运算

用google可以找到许多相关的paper。

祝你好运

0

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2003-12-18 20:01:00 | 显示全部楼层

Re:谁能帮我解决,我叫他 爹.....

你可以拿float来保存分子和分母呀

2

主题

21

帖子

21

积分

注册会员

Rank: 2

积分
21
QQ
发表于 2004-1-6 16:56:00 | 显示全部楼层

Re:谁能帮我解决,我叫他 爹.....

大哥:
    不知道你用过MATHIMATIC没有,用它就可以解决,它可以计算出精确解!!

应该可以解决!!,MATHIMATIC也提供编程的!!!!
数学软件!!!

6

主题

74

帖子

100

积分

注册会员

Rank: 2

积分
100
发表于 2004-1-7 09:05:00 | 显示全部楼层

Re:谁能帮我解决,我叫他 爹.....

自己写个处理大整数,分数的类吧
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-2-25 00:23

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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