能力值:
( LV2,RANK:10 )
|
-
-
2 楼
没有看懂啦········
|
能力值:
( LV9,RANK:610 )
|
-
-
3 楼
烦请把左边的地址栏也给出来好么
这样我哪知道那几个跳转是跳哪去的?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
切割多了,没注意,呵呵,更新了图片了
|
能力值:
( LV9,RANK:160 )
|
-
-
5 楼
下面这段是在2的N次方中,取比被开放数的平方根略大的数(提高效率的作用)
LABLE1:(0048DE40) ADD ECX, ECX SHR ESI, 1 CMP ECX, ESI JB SHORT LABLE1
从比较接近平方根的数开始,不断的接近平方根(取整),直到最接近为止。
NearSquareRoot = (radicand / NearSquareRoot + NearSquareRoot) /2
NearSquareRoot会越来越接近平方根
LABLE2:(0048DE48) MOV EAX, EDI XOR EDX, EDX DIV ECX MOV ESI, ECX ADD EAX, ECX SHR EAX, 1 MOV ECX, EAX CMP ECX, ESI JB LABLE2
|
能力值:
( LV9,RANK:160 )
|
-
-
6 楼
好久不写代码了,简单的用c实现一下:
#include "stdio.h"
int main() {
int num = 0, SquareRoot = 1; int s = 0, n = 0; int NearSquareRoot, NearSquareRootBat;
printf("Input radicand(输入被开放数): "); scanf("%d", &num);
if(SquareRoot < num) { n = num; s = SquareRoot;
while( s < n) { s *= 2; n /= 2; } NearSquareRoot = s; }
printf("NearSquareRoot: %d\n", NearSquareRoot);
do { NearSquareRootBat = NearSquareRoot; NearSquareRoot = (num / NearSquareRoot + NearSquareRoot) /2; } while(NearSquareRootBat > NearSquareRoot);
SquareRoot = NearSquareRootBat; printf("Round SquareRoot(平方根取整): %d\n", SquareRoot);
return 0; }
|
能力值:
( LV9,RANK:610 )
|
-
-
7 楼
学习了 犀利的编译器的优化
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
一个字:犀利。。
哈哈,长见识了,谢谢
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
真没看懂...0 0
|
|
|