找回密码
 注册
X系列官方授权正版
搜索
楼主: nhofb

[灌水] 哦也,偶发现了0.15一个好玩的地方………………

[复制链接]
发表于 2013-3-27 02:28:30 | 显示全部楼层
tcelvis 发表于 2013-3-26 23:13
浮点运算不太可能使用自定义格式。因为浮点数格式是跟CPU、GPU硬件绑定的。不符合的话会非常麻烦。因为一 ...

应该是float吧。double记得比这个精确多了……(是double来着么?)


                        ORBIT
                        {
                                SMA = 5029261.70279342
                                ECC = 0.000840050943661042
                                INC = 0.518005483884955
                                LPE = 319.147153605652
                                LAN = 305.883678918814
                                MNA = 4.33970573326823
                                EPH = 846290.456863916
                                REF = 1
                                OBJ = 1
                        }
回复

使用道具 举报

发表于 2013-3-27 08:49:34 | 显示全部楼层
8749236 发表于 2013-3-27 02:28
应该是float吧。double记得比这个精确多了……(是double来着么?)

这个看不出来的,关键是程度读取的时候读成什么格式
回复

使用道具 举报

发表于 2013-3-27 10:09:20 | 显示全部楼层
tcelvis 发表于 2013-3-27 08:49
这个看不出来的,关键是程度读取的时候读成什么格式

我想应该不会double和float之间来回换的。
不然的话每一次存取都会造成误差。那可不好玩……
回复

使用道具 举报

发表于 2013-3-27 10:30:40 | 显示全部楼层
8749236 发表于 2013-3-27 10:09
我想应该不会double和float之间来回换的。
不然的话每一次存取都会造成误差。那可不好玩…… ...

只要程序员不瞎写的话,序列化和反序列化使用的应该是同一个类型,不会串的。
单元测试的用例就是创建数据、写入数据、读取数据,比较和原始数据是否相同。这部分估计代码很早就测试通过并“冻结”了
回复

使用道具 举报

发表于 2013-3-27 10:31:21 | 显示全部楼层
8749236 发表于 2013-3-27 02:28
应该是float吧。double记得比这个精确多了……(是double来着么?)

这个就是double,float比这个还要短
如果double是:4.7527289157379,则转为float后只有4.752729
回复

使用道具 举报

发表于 2013-3-27 10:32:03 | 显示全部楼层
8749236 发表于 2013-3-27 02:28
应该是float吧。double记得比这个精确多了……(是double来着么?)

至于计算用的数值格式与硬件无关,只与需求和实现来决定,例如编程的语言、编译环境和运算需求等。
只用整型运算一样也可以计算高精度的浮点。
KSP这种游戏实在没必要考虑这么复杂,GPU运算不会带来更好的体验,CPU运算足以,优化性能是首选方法是优化算法,而不是提高计算能力。

但对于对精度要求高的科学运算,自定义浮点格式是必要的,例如这个用1执行500次除以2得到的349个小数位的浮点数,单靠double和float是肯定算不出来的
3.0549363634996046820519793932136176997894027405723266638936139092812916265247204577018572351080152282568751526935904671553178534278042839697351331142009178896307244205337728522220355888195318837008165086679301794879136633899370525163649789227021200352450820912190874482021196014946372110934030798550767828365183620409339937395998276770114898681640625E-151
回复

使用道具 举报

发表于 2013-3-27 11:17:44 | 显示全部楼层
本帖最后由 8749236 于 2013-3-27 11:19 编辑
chengfan 发表于 2013-3-27 10:32
至于计算用的数值格式与硬件无关,只与需求和实现来决定,例如编程的语言、编译环境和运算需求等。
只用 ...


这我知道>_>
谢谢!

*** Add ***
补充下,即使是科学计算像你这么高精度的很少见呢...
物理引擎基本上float足矣。必要用double。
不过记得double是双份float……不知道内存会不会也double呢……没试过……
PS:我一直用double从不用float……
回复

使用道具 举报

发表于 2013-3-27 11:22:06 | 显示全部楼层
本帖最后由 tcelvis 于 2013-3-27 13:44 编辑
8749236 发表于 2013-3-27 10:09
我想应该不会double和float之间来回换的。
不然的话每一次存取都会造成误差。那可不好玩…… ...


你是无法从一个文本数字的小数点后面的位数来判断出double和float类型的……float类型也有23位的二进制精度的,换算成十进制是1/(2的22次方),你自己数有多少位小数去吧。

大部分float只要保存成比较短的文本格式基本上都是有误差的,因为要完全展开需要的十进制位数实在是太多了。只有直接保存为二进制格式才会一定是准确的。
回复

使用道具 举报

发表于 2013-3-27 11:26:32 | 显示全部楼层
本帖最后由 tcelvis 于 2013-3-27 11:38 编辑
chengfan 发表于 2013-3-27 10:31
这个就是double,float比这个还要短
如果double是:4.7527289157379,则转为float后只有4.752729 ...


你对float和double的理解程度就是float等于十进制的7位有效数字,double等于14位有效数字么……

如果你也是同行的话我只能表示遗憾了。

大部分float都可以轻易展开到小数点后面20位以上。
回复

使用道具 举报

发表于 2013-3-27 11:32:28 | 显示全部楼层
本帖最后由 tcelvis 于 2013-3-27 11:40 编辑
chengfan 发表于 2013-3-27 10:32
至于计算用的数值格式与硬件无关,只与需求和实现来决定,例如编程的语言、编译环境和运算需求等。
只用 ...


虽然你说的都对,但是显然毫无重点。

整型运算当然可以构建浮点运算。你让我用加法器给你搭一个FPU我都可以给你搭出来。我本科毕设就是做数字电路设计的。秀知识面我还真不惧你。

问题是你如果要使用FPU进行硬件级别上的浮点运算的话就必须使用IEEE754浮点,从这个意义上来说要得到合理性能的前提下浮点类型当然是和硬件绑定的。

你当然可以自定义浮点,我也没说不可以。但是就像我说的一样自定义浮点运算非常麻烦。因为你必须自己手动在软件层面上用整型运算来模拟本来应该由硬件完成的运算,对于性能的影响至少在2-4个数量级。而且我和楼上讨论的前提就是KSP是否可能使用自定义浮点。你非要把高精度科学计算扯进来秀知识面也随你。

至于你说CPU运算足以,我只能呵呵呵了。真要那么宽裕也不会使用这个不支持L点的物理模型了。优化算法当然比提高计算力强。但是您能不能说点比这个大而空的口号更细节的内容出来呢?
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|DeepTimes.NET 太空游戏站