自己寫平方根squareroot函式

2021-09-06 05:38:46 字數 862 閱讀 7008

今日做一面試題目,寫一平方根squareroot函式,函式介面為:

unsigned int squareroot(unsigned int input);    //不考慮float情況

經過思考,用位移的方法,乙個整數32bits,那麼平方根最多16bits,那麼對於這16個bits,從最大權重的bit開始,看是置1還是置0,一步一步往後走,到最後乙個bit被置完之後,平方根也就求出了。

那麼如何判斷後16bits中,某乙個特定的bit是0還是1呢?

這樣判斷,因為從most significant到least significant,那麼首先將當前需要判斷的bit置1,然後平方,看比input是否大,如果置1了都不比input大,那麼說明還需要右面的(less significant)bits們幫忙來接近平方根。簡單說一句,先將該位置1,平方,如果小於等於input,那麼該位就需要置1;否則,置0。

那麼接下來,就是見證**的時刻:

#include using

namespace

std;

typedef unsigned

intuint;

uint squareroot(uint

input);

intmain()

uint squareroot(uint

input)

return

answer;

}

中途曾經出過乙個問題,問題發生於squareroot()函式中的第7行:

if ( ((answer + (1《一開始對於其中的 (1

平方根問題

考慮定義在兩正整數上的函式ssr 平方根之和的平方 ssr a,b sqrt a sqrt b 2。牛牛對函式值為整數的情況很感興趣。現在給定整數n和m,請幫助牛牛計算有序對 a,b 的數量,滿足1 a n,1 b m而且ssr a,b 是乙個整數。這道題本質上是要求sqrt ab 是整數,也就是要...

快速平方根演算法

在3d圖形程式設計中,經常要求平方根或平方根的倒數,例如 求向量的長度或將向量歸一化。c數學函式庫中的sqrt具有理想的精度,但對於3d遊戲程式來說速度太慢。我們希望能夠在保證足夠的精度的同時,進一步提高速度。carmack在quake3中使用了下面的演算法,它第一次在公眾場合出現的時候,幾乎震住了...

求平方根函式

加一點注釋 unsigned short work unsigned int n 要進行開平方運算的物件 unsigned int ans 0 開平方運算的結果 unsigned int square 0 記錄中間產生的平方值 unsigned short r 0 程式最終的返回結果 for int...