游戏开发论坛

 找回密码
 立即注册
搜索
楼主: 航天奇侠

我怎么觉得越来越少新人学编程

[复制链接]

14

主题

283

帖子

293

积分

中级会员

Rank: 3Rank: 3

积分
293
QQ
发表于 2006-2-10 21:17:00 | 显示全部楼层

Re: Re: Re:我怎么觉得越来越少新人学编程

justlikethewind: Re: Re:我怎么觉得越来越少新人学编程


计算机数值算法基本的应用:比如x1=-2c/(b+sqroot(b^2-4ac))。
弄明白符号计算和计算机浮点数值计算的差别再嘲笑我吧。


原来你想的那么简单啊~晕了。
是我考虑多了,不好意思~~
我以为是浮点数的精度问题呢
b^2-4ac的正付不用考虑吗?
当b^2和4ac很接近时,b^2-4ac在计算机中正付是不确定的,明明是正的,算出来很可能是付的,你还用开方?x1=-2c/(b+sqroot(b^2-4ac))。
b^2-4ac的正付都还没确定,你还来求解?初中数学学过了没啊?

而且公式还是错误的~~

13

主题

113

帖子

123

积分

注册会员

Rank: 2

积分
123
QQ
发表于 2006-2-10 21:17:00 | 显示全部楼层

Re: Re: Re:我怎么觉得越来越少新人学编程

justlikethewind: Re: Re:我怎么觉得越来越少新人学编程


计算机数值算法基本的应用:比如x1=-2c/(b+sqroot(b^2-4ac))。
弄明白符号计算和计算机浮点数值计算的差别再嘲笑我吧。


--------------------------------------------------------------------
if(a!=0)
    x1=(-b+sqrt(abs(b^2-4ac)))/2a;
else if(b!=0)
    x1=-c/b;
---------------------------------------------------------------------
我承认我比较白,想请教下上面这样的代码有什么问题(在不考虑复根的情况下)?

说下你认为比较难的第二题吧,我很感兴趣。

PS: 大家好好讨论不行吗,为什么说话要那么激?

14

主题

283

帖子

293

积分

中级会员

Rank: 3Rank: 3

积分
293
QQ
发表于 2006-2-10 21:22:00 | 显示全部楼层

Re:我怎么觉得越来越少新人学编程

~~我错了,a,b,c是整数的,那就不存在问题了,只要公式对,判断下正付就好了

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
发表于 2006-2-10 22:34:00 | 显示全部楼层

Re: Re:我怎么觉得越来越少新人学编程

郑群: Re:我怎么觉得越来越少新人学编程

~~我错了,a,b,c是整数的,那就不存在问题了,只要公式对,判断下正付就好了

我对你几乎无话可说。你见我写的是sqrt这个标准开方函数了吗?我写的是sqroot自定义的操作啊……
另外公式没有任何错误,请你自己看我下面一个帖子的回复然后检讨自己为虾米这么xx。

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
发表于 2006-2-10 23:39:00 | 显示全部楼层

Re: Re: Re: Re:我怎么觉得越来越少新人学编程

黑鸟: Re: Re: Re:我怎么觉得越来越少新人学编程



--------------------------------------------------------------------
if(a!=0)
    x1=(-b+sqrt(...

你这个单纯的实现有很多问题。
首先,开方的问题只要是人都会注意到,根本不值一提。所以我的解答只是用了sqroot来抽象这个操作,并没有特意指出。但是没想到某人会在这个上面大做文章,我无语……
其次,并不是所有人都会注意到的一个问题是,传统的一元二次方程符号解法是
x1=(-b+sqrt(b^2-4ac))/2a,
x2=...
注意看x1,假设b>>ac,导致x1的分子部分两个非常接近的浮点数b和sqrt(b^2-4ac)相减,这会造成大量的有效数字丢失。这是浮点数运算中需要绝对避免的运算之一。另外几个需要避免的问题包括除以非常接近零的浮点数等。如果你不熟悉这个问题,可以参考
http://sxyd.sdut.edu.cn/shuzhifenxi/1.2/szfx012.htm
上面有个 “用四位浮点数计算“ 导致有效数字大量丢失的例子。

然而幸运的是,这个问题是可以避免的,只要我们不让两个非常接近的浮点数相减就可以了。
所以一些有智慧的学者用下面这个公式计算x1,
x1=-2c/(b+sqroot(b^2-4ac))。
注意,上面这个公式和原先的公式是完全等价的,只不过是用了分子有理化的操作,某人居然就不认识了,还说是错的,我再次无语……

你的实现中最后一个也是最大的问题,你把问题局限在整数范围,这是非常要命的……如果我来实现的话,最起码也要把类型参数化,也就是说用template来实现。

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
发表于 2006-2-10 23:44:00 | 显示全部楼层

Re:我怎么觉得越来越少新人学编程

厄,为了照顾某个连分子有理化都无法理解的人,说明一下。
x^2读作x的二次方,b>>ac读作b远大于ac,这些都是数学上常用的表达方式。

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
发表于 2006-2-10 23:52:00 | 显示全部楼层

Re:我怎么觉得越来越少新人学编程

黑鸟,你就是友善之臂的老板呀?
嘿嘿,我前几天刚撞进去过,你的xmath库不会就是这么实现的吧?

30

主题

569

帖子

569

积分

高级会员

Rank: 4

积分
569
发表于 2006-2-11 09:29:00 | 显示全部楼层

Re:我怎么觉得越来越少新人学编程

  你那个一元二次方程我确实没有用到过,结贴吧,不想斗嘴。

0

主题

129

帖子

139

积分

注册会员

Rank: 2

积分
139
发表于 2006-2-11 12:49:00 | 显示全部楼层

Re:我怎么觉得越来越少新人学编程

足见网络游戏作为一个复杂的巨大系统工程,谁都不可能全面掌握所有的技术细节,更需要各学科和专业的人才团结合作才可能取得一些成绩,离成功还差距很远。

13

主题

113

帖子

123

积分

注册会员

Rank: 2

积分
123
QQ
发表于 2006-2-12 18:02:00 | 显示全部楼层

Re:我怎么觉得越来越少新人学编程

TO justlikethewind:

我仔细想了下,这里有几个疑问:

你将-b+sqroot(b^2-4ac)改成b+sqroot(b^2-4ac),似乎不能解决你所说的(b^2)>>4ac的问题,如果b是负数呢?同样会导致近似的数相减。如果真要考虑全的话,那么任何两个浮点数相减都会有问题的。

关于浮点数精度的问题我不怎么懂,也没仔细考虑过。写GAME的时候真的会有很大影响吗?事实上,我觉得有4位左右的精度似乎就很足够了。

我刚涉足3D领域,有很多不懂,还望指教。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-23 10:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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