作者MasterChang (我爱ASM)
看板ASM
标题Re: [问题] 自然数开平方
时间Fri Mar 4 16:31:57 2011
http://supp.iar.com/FilesPublic/SUPPORT/000419/AN-G-002.pdf
http://ww1.microchip.com/downloads/cn/AppNotes/cn_91040a.pdf
另外
http://www.azillionmonkeys.com/qed/ulerysqroot.pdf 这篇文章也提出一个
快速整数开根号的方法。
以下是C Code实作。
/* by Mark Crowne */
static unsigned int mcrowne_isqrt (unsigned long val) {
unsigned int temp, g=0;
if (val >= 0x40000000) {
g = 0x8000;
val -= 0x40000000;
}
#define INNER_ISQRT(s) \
temp = (g << (s)) + (1 << ((s) * 2 - 2)); \
if (val >= temp) { \
g += 1 << ((s)-1); \
val -= temp; \
}
INNER_ISQRT (15)
INNER_ISQRT (14)
INNER_ISQRT (13)
INNER_ISQRT (12)
INNER_ISQRT (11)
INNER_ISQRT (10)
INNER_ISQRT ( 9)
INNER_ISQRT ( 8)
INNER_ISQRT ( 7)
INNER_ISQRT ( 6)
INNER_ISQRT ( 5)
INNER_ISQRT ( 4)
INNER_ISQRT ( 3)
INNER_ISQRT ( 2)
#undef INNER_ISQRT
temp = g+g+1;
if (val >= temp) g++;
return g;
}
另外用中值定理求解也是一种方法,尤其在单晶片,只用加、减、移位就能做到。
※ 引述《loteslogin (张三立)》之铭言:
: 言归正传:
: 有一个正整数
: mov eax, [esi]
: mov edx, 0
: 请问怎样的方法可以快速计算出该正整数的平方根?
: (不大於 sqrt(eax) 的最大整数)
: 希望乡民们来思考这个问题,与在下一同追求真知,让自能达到「懂很多」的境界~
: 请乡民们不吝指教,谢谢。
这个只要会用google就能求解。当然,如果您数值方法不是很懂的话,直接用就好。
里面的作法其实非常有趣,可以享受作者的巧思。
--
不要问我从哪来,我只是一个浪迹天涯的工程师....
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.232.60.70
1F:推 loteslogin:感谢你嘿~以前在 KKCity 有看过你唷~ 03/07 07:02