Algorithm 版 (精华区)
发信人: Lerry (life is waiting...), 信区: Algorithm
标 题: [合集]终于找到原因了!
发信站: 哈工大紫丁香 (2003年11月27日18:27:56 星期四), 站内信件
────────────────────────────────────────
hewind ( 比pineapple写的程序慢了200倍! :( 555~~) 于 2003年10月08日15:38:11 星期三 说道:
今天中午改了一下程序结果速度还是比pineapple的慢很多!
就算是只进行char到int的转换,单这一个函数执行起来速度都要比pineapple慢3倍。
仔细跟踪发现,
在转换的过程中,我用的是__int64,而pineapple用的是int32。
我一次转换九位十进制数,pineapple一次转换八位十进制数,
后来,我也把程序改成用int32,结果与pineapple在这一转换过程中速度同级了。
看来32位机上用32位长的数据是最好的!
不过,用64位长的数据可以使以后在运算的过程中减少*法运算次数,
这之间的速度情况还需要进一步考察!
不过在一般情况下,感觉用int32比int64要快!
────────────────────────────────────────
hewind ( 比pineapple写的程序慢了200倍! :( 555~~) 于 2003年10月08日15:44:30 星期三 说道:
呵呵,相到了一个两全其美的好方法!
试试先~~~
────────────────────────────────────────
pineapple (菠萝) 于 Wed Oct 8 15:50:50 2003 说道:
对于乘法, 转换时间相对于运算时间可以忽略了 :)
────────────────────────────────────────
hewind ( 比pineapple写的程序慢了200倍! :( 555~~) 于 2003年10月08日15:54:35 星期三 说道:
错了!
根本原因不是在int64与int32这个地方。
经过第N次他细测量,
发现真正的原因是除8与除9这个地方!
pineapple一次转换8位数,因此,它的程序是len/8
而我一次转换9位数,程序就是len/9
而计算机对 /8 比 /9 要算得快得多!
也可能是对 /8 编译器进行了汇编级的优化。
因为从硬件角度 8 远比 9 好处理
我把我的转换程序其它语句一句不动,就把里面的 9 改成 8 后,与pineapple程序同级
而改成 7 或 9 就要慢 3 倍!
因此,要想执行得快,看来不要让计算机进行非 /8 之类的操作。尽量 /8
────────────────────────────────────────
hewind ( 比pineapple写的程序慢了200倍! :( 555~~) 于 2003年10月08日15:55:29 星期三 说道:
呵呵,我转换时间就慢了你3倍,岂不左郁闷!
呵呵,现在找到原因了,等我改改程序,再来看看!:P
────────────────────────────────────────
jijian (CC) 于 2003年10月08日15:59:06 星期三 说道:
什么除8和除9
说的在详细些。
不会只是除一次吧。
────────────────────────────────────────
hewind ( 比pineapple写的程序慢了200倍! :( 555~~) 于 2003年10月08日17:31:02 星期三 说道:
用输入串的当前位置去除位数(8 or 9),得到的位置就是你要截取的字符串需要放入
暂存数组中的位置。
除多少次跟你的输入串多长要截取多少次有关。
除8的确比除9要快!
────────────────────────────────────────
jijian (CC) 于 2003年10月08日19:50:44 星期三 说道:
我的程序中没有这样实现
我是模九的。
────────────────────────────────────────
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.270毫秒