Re: [問題] 自然數開平方

看板ASM (組合語言)作者 (我愛ASM)時間14年前 (2011/03/04 16:32), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
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
感謝你嘿~以前在 KKCity 有看過你唷~
03/07 07:02, 1F
文章代碼(AID): #1DSAE05e (ASM)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1DSAE05e (ASM)