游戏开发论坛

 找回密码
 立即注册
搜索
123
返回列表 发新帖
楼主: 俗尘

[讨论] 关于数值计算是否运用浮点

[复制链接]

0

主题

172

帖子

176

积分

注册会员

Rank: 2

积分
176
发表于 2006-4-26 10:26:00 | 显示全部楼层

Re: Re:关于数值计算是否运用浮点

俗尘: Re:关于数值计算是否运用浮点

我不管你们数值最后是要带小数的还是不带小数位的整数。

就是78也要变成78.00拿来运算,现在78.00算的比78快很多!理解?



小汗一把……
我前面说过,浮点数在不同软硬环境下的电脑中,经过CPU计算后(尤其是多次计算),得到的结果会有差异,这说的就是计算问题,不是存储……

简单几次计算还好,精度误差不大,但经过大量复杂计算之后,不同配置的机器得到的结果可能完全不一样!

就算计算速度再快得到的结果却不准确,有什么用?

更不要说什么浮点比整型计算快,现在的浮点数定义标准下,至少在当代CPU上是不可能比整型快的(有兴趣的去查阅计算机组成原理,会程序的去看汇编代码)

52

主题

979

帖子

1066

积分

金牌会员

Rank: 6Rank: 6

积分
1066
QQ
发表于 2006-4-26 11:24:00 | 显示全部楼层

Re:关于数值计算是否运用浮点

浮点运算比整型快??

头一次听说的新鲜事情,,哈哈

10

主题

70

帖子

100

积分

注册会员

Rank: 2

积分
100
 楼主| 发表于 2006-4-26 20:01:00 | 显示全部楼层

Re:关于数值计算是否运用浮点

To 6spring
查几几年的《计算机原理》?都说了以前整形是比浮点计算的快,而现在的CPU浮点计算的比整形计算快,有查书的时间写两个循环,看一下结果就知道了。推翻别人的的论点需要科学依据,不然就有点误导人的嫌疑了。

To xiaoBig
天下头一次听说的事情很多,你不了解的事情并不代表不存在。就算要取笑别人的观点也需要拿出事实依据。

To 所有人
这个论坛之中应该有不少专业人士,既然被人称为专业人士,遇事请不要主观武断,应该本着依据客观事实、相互交流、相互学习的态度,就算要拍板砖,也要拍出点技术含量,让人信服吧。

0

主题

172

帖子

176

积分

注册会员

Rank: 2

积分
176
发表于 2006-4-26 21:11:00 | 显示全部楼层

Re:关于数值计算是否运用浮点

我很想知道楼上的是否知道计算机是怎样计算浮点数的,而浮点数是怎么定义的~~~

不说其他的,光说+-法,浮点数计算需要5个步骤(即最少需要5条机器微指令,注意这里是微指令,是CPU最小操作单位)
对阶(比如说 *10^-5 与*10^-2计算,需要先统一为*10^-5阶,才能开始计算)
尾数加减
规格化为浮点数标准
对对阶时移位移出的尾数做出舍入(为了保证精度)
判断阶码是否溢出(CPU设置相应标志位)


定点整数,只有加减并设置标志位~~

PS:我是程序,我基本没听哪个程序敢说浮点计算比定点快。
再次PS:说是写代码验证过的人,请检查自己检测运算时间所用的计时器精度,请用汇编书写代码,并使用Intel等CPU制造商的编译器,优化选项关闭,(一般编译器都会默认对无意义循环计算优化去除)

0

主题

172

帖子

176

积分

注册会员

Rank: 2

积分
176
发表于 2006-4-26 21:17:00 | 显示全部楼层

Re:关于数值计算是否运用浮点

再说一句,不要以为显示有0.0X就一定是浮点的效果,整数*/个1000什么的,一样让你看起来像是浮点数。

请记住,浮点数不是指含小数的数,是以 a * 2^n 格式存储的数!

12

主题

36

帖子

100

积分

注册会员

Rank: 2

积分
100
发表于 2006-4-27 20:38:00 | 显示全部楼层

Re:关于数值计算是否运用浮点

楼主是教主 上次说过WOW里面任务物品掉落组队几率要变原先的1/N,假牙 我回去问同学不管什么任务物品都没这个特性~~.

10

主题

70

帖子

100

积分

注册会员

Rank: 2

积分
100
 楼主| 发表于 2006-4-27 22:37:00 | 显示全部楼层

Re:关于数值计算是否运用浮点

TO 6spring
你写这么长一段话要反驳我的观点前,你自己测试过嘛?

PS:在这篇帖子的回帖中,我不止一次的告诉大家我的观点是数值用浮点的储存格式来计算,你仔细看到嘛?

10

主题

70

帖子

100

积分

注册会员

Rank: 2

积分
100
 楼主| 发表于 2006-4-27 22:40:00 | 显示全部楼层

Re:关于数值计算是否运用浮点

TO wlustc
WOW的任务物品掉落在组队情况下就是1/n,一个玩家需要平均杀10个怪完成的收集N个任务道具的。在组队情况下,杀完10个怪,所有队友不可能都拿到足够数量的任务道具都完成任务的。

0

主题

172

帖子

176

积分

注册会员

Rank: 2

积分
176
发表于 2006-4-27 23:30:00 | 显示全部楼层

Re: Re:关于数值计算是否运用浮点

俗尘: Re:关于数值计算是否运用浮点

TO 6spring
你写这么长一段话要反驳我的观点前,你自己测试过嘛?

PS:在这篇帖子的回帖中,我不止一次的告诉大家我的观点是数值用浮点的储存格式来计算,你仔细看到嘛?



-___-|||

“查几几年的《计算机原理》?都说了以前整形是比浮点计算的快,而现在的CPU浮点计算的比整形计算快,有查书的时间写两个循环,看一下结果就知道了。推翻别人的的论点需要科学依据,不然就有点误导人的嫌疑了。”

这话谁说的,你不是要理论么,我就写了点理论,反而是你不耐烦了~~


呵呵,既然你说的要测试,我就现写代码测试了一把。
测试环境 vc8 控制台
计算代码:


  1. SpLib::CTimer time;

  2. float x = 0.2f;
  3. float y = 123.456f;
  4. float z = 0.0f;

  5. //运算1
  6. time.Begin();
  7. for(int i=0;i<10000000;i++)
  8.     z += x*y;
  9. std::cout<<time.End(1000000)<<std::endl;

  10. int a = 2;
  11. int b = 123;
  12. int c = 0;

  13. //运算2
  14. time.Begin();
  15. for(int i=0;i<10000000;i++)
  16.       c += a*b;
  17. std::cout<<time.End(1000000)<<std::endl;

复制代码


其中time为高精度计时器,使用QueryPerformanceFrequency与 QueryPerformanceCounter,采用CPU运行周期数/CPU频率计算时间间隔,测试时使用微秒级(1/1000000秒)精度

所使用电脑为赛扬2.53G
2种运算各1000W次,测试6次,浮点数计算112575微秒 至 139050 微秒之间,整数运算为37446至39831之间,速度相差4倍。

请你认识的程序再测试一把吧!


PS:对于“在这篇帖子的回帖中,我不止一次的告诉大家我的观点是数值用浮点的储存格式来计算,你仔细看到嘛?”,您清楚什么是浮点数么?带小数点的数?可笑!自己找找浮点数的IEEE标准学习一下吧~~~~


再次PS:我说了很多关于计算速度问题,其实这并不是关键,关键在于浮点数在不同软硬环境下多次复杂计算后,所得值不一定完全一样!当然你写的东西只是一台机器上跑跑玩玩,不需要很多人用同一计算得到同一结果,算我没说。

就此打住,不再回此帖。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-9 13:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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