我正在研究一個小算法,實際上是一個數學函數,我必須找到一個數字,同時以另一個數字加倍開始。找到一個數字的範圍
例如,我必須找到206的範圍內,而從8開始,它即
8 + 8 -> 16 + 8 -> 24 + 8 -> 32 ...
倍增在某一點已找到206之前最接近的數字,然後添加進一步8爲該值將是必需的。
有沒有可以直接使用的統計或數學公式?
我正在研究一個小算法,實際上是一個數學函數,我必須找到一個數字,同時以另一個數字加倍開始。找到一個數字的範圍
例如,我必須找到206的範圍內,而從8開始,它即
8 + 8 -> 16 + 8 -> 24 + 8 -> 32 ...
倍增在某一點已找到206之前最接近的數字,然後添加進一步8爲該值將是必需的。
有沒有可以直接使用的統計或數學公式?
是的,它被稱爲整數除法。
result_lo = floor(206/8) * 8
result_hi = (floor(206/8) + 1) * 8
這很棒..謝謝@ H2CO3 ...看起來好像給結果。 –
@FarrukhWheheed:你知道它爲什麼給出結果嗎? – Aravind
那麼,我很有興趣知道這一點。但是請閱讀它的內在方面以及那裏可怕的數學。即http://www.encyclopediaofmath.org/index.php/Floor_function –
由於您在理解地板時遇到困難,請讓我簡單地向您描述一下。
floor(x) = the greatest integer less than or equal to x
所以
floor(2.99) = 2
floor(2.00) = 2
floor(-0.99) = -1
爲什麼地板(N/8)* 8部作品?
我們希望8的最大倍數小於或等於N?
所以我們要刪除多達8我們所能,直到它大於0
206-8-8-8-8-8 -.... 8 = 6
除此之外,如果我們減去8它會低於0.所以我們在這裏停下來。
一個重要的觀察結果是劃分是簡單的重複減法。
這意味着劃分八分之二百零六使我們可以從206
當輸入數目限制爲正數中減去8的數,然後就可以簡單地使用整數除法在C++中。這是因爲,當您在C++中執行整數除法時,結果會被截斷。
也就是說8/3將被設置爲2
雖然8/3是2.66,結果只有整數part.The小數部分被忽略。(這只是一個簡單的解釋,對於負整數,你需要遵循)因此,在C++
,可以簡單的寫:
((N)/8)*8
請不要隨便使用的東西,因爲它的工作原理,試圖找出爲什麼它的作品!
@Farrukh Waheed,基於Aravind的最後一句話: 如果你不明白它爲什麼起作用,那麼你就不知道它是否真的有效。它只是在你測試它的情況下做你想做的事情,那就是所有.. – Ioannis
非常感謝Aravind對於這樣的細節......我肯定會在這個時候繼續工作,因爲我現在在這個時候沉迷於其他任務..真的很感謝。 –
冒着聽起來天真的風險..你是要求'[floor(206/8)* 8,ceil(206/8)* 8]' – Ioannis
@loannis我想是的,我只是回答說如果你看密切。 – 2013-06-30 20:30:54
@ H2CO3對不起,我沒有刷新頁面 - 點! – Ioannis