Re: [問題] 自然數開平方
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
推
03/07 07:02, , 1F
03/07 07:02, 1F
討論串 (同標題文章)
ASM 近期熱門文章
PTT數位生活區 即時熱門文章