不使用乘法或除法運算符。 您只能使用添加/減法運算符。你將如何在C中實現pow(a,b)?條件如下 -
0
A
回答
9
一個毫無意義的問題,但可以解決的,對數的性質:
pow(a,b) = exp(b * log(a))
= exp(exp(log(b) + log(log(a)))
小心,以確保您的指數函數和對數函數使用相同的基礎。
是的,我知道如何使用滑尺。學習這個技巧會改變你對數的觀點。
4
如果它們是整數,則很容易將pow(a,b)轉換爲a的b乘法運算。
pow(a, b) = a * a * a * a ... ; // do this b times
和簡單的把一個*一成增加
a * a = a + a + a + a + ... ; // do this a times
如果將它們結合起來,可以使戰俘。
首先,製作mult(int a,int b),然後用它來製作pow。
2
遞歸解決方案:
#include<stdio.h>
int multiplication(int a1, int b1)
{
if(b1)
return (a1 + multiplication(a1, b1-1));
else
return 0;
}
int pow(int a, int b)
{
if(b)
return multiplication(a, pow(a, b-1));
else
return 1;
}
int main()
{
printf("\n %d", pow(5, 4));
}
0
你已經得到答案純粹的FP和純粹的整數。下面是一個FP數字升至一個整數的功率:
double power(double x, int y) {
double z = 1.0;
while (y > 0) {
while (!(y&1)) {
y >>= 2;
x *= x;
}
--y;
z = x * z;
}
return z;
}
目前這使用乘法。您可以僅使用位移,幾比較和添加來實現乘法。對於整數它看起來像這樣:
int mul(int x, int y) {
int result = 0;
while (y) {
if (y&1)
result += x;
x <<= 1;
y >>= 1;
}
return result;
}
浮點幾乎是相同的,除了你必須正常化的結果 - 即,在本質上,一個浮點數1)尾數表示爲(通常相當大)的整數,以及2)比例因子。如果你想產生正常的IEEE浮點數,一些部分會變得有點醜陋 - 例如,比例因子被存儲爲一個「偏差」數,而不是任何通常的1的補碼,2的補碼等,所以與它一起工作是笨拙的(基本上,每個操作你減去偏見,做操作,檢查溢出,並且(假設它沒有溢出)重新加上偏差)。
做這項工作時沒有任何一種邏輯測試聽起來(對我而言),因爲它可能並非真正意圖。對於不少計算機體系結構類,將問題簡化爲可以直接用硬件表示的原始操作(例如,位移,按位--, - OR
和 - NOT
等),上述實現非常合適(如果你想獲得技術,一個加法器需要幾個門,但是VHDL,Verilog等,但它包含在VHDL和Verilog等東西中)。
相關問題
- 1. 用a * pow(b,N)替換a * b ** N
- 2. 如何實現動態WHERE LIKE%A%B%
- 3. 如何在js中將字符串('a | b \\ | c')拆分爲數組('a','b | c'')?
- 4. SQL條件:(A = B AND C LIKE%D%)或(A LIKE%B%和C = D)
- 5. 從{a-b,b-c,c-a}改變爲{(a,b),(b,c),(c,a)}?
- 6. 如何寫A :: B :: C => D給定A :: B :: C和(A,B,C)=> D?
- 7. 如何在C#中編寫exp(a/b)?
- 8. Restrictions.Disjunction()條件A和條件B或條件C及條件d
- 9. \ b如何實現?
- 10. 爲什麼a + = b * pow(10,c-i-1)== 99 C++?
- 11. 如何在Scala中從a => b => c獲取(a,b)=> c?
- 12. 如何將字符串轉換爲數組「a,b,c」=>「a」,「b」,「c」?
- 13. 將C代碼轉換爲R代碼:解析以將R中的C函數(pow(a,b)更改爲^ b)
- 14. 爲條件執行MCDC(A && B && C)|| D
- 15. 我想從['a','b','c']將python列表變成['a','a','b',b','c','c']
- 16. 發現((A + B)/ C)模m
- 17. PHP變換陣列'a','b','c'到'a/b/c','a/b','a'
- 18. 如何查詢:在類A,B和C
- 19. a + b如何不等於b + a?
- 20. 如何實現double Pow(double base,double ex)
- 21. 只留下給定列表中未重複的元素。例如:(a b a a a c)給了我們(a b)
- 22. 語句a = a^b如何在C++中工作?
- 23. 你將如何在PHP 5.4中實現基本的文件上傳進度條?
- 24. [b] [b = a,0]如何在a和b之間交換?
- 25. SqlAlchemy如何查詢列A == a和B == b和A == b和B == a
- 26. 如何將A * A std ::數組拆分爲B * B的塊?
- 27. 如何計算24a + 36b的funct(a,b)給出哪些在函數實現中執行a + b的幫助?
- 28. 實體框架:將實體A鏈接到現有實體B
- 29. a = b || c在Python中
- 30. Tcl [list a b c] vs {a b c}有什麼區別,在什麼情況下?
什麼,沒有比較運營商? – bdonlan 2011-02-13 16:12:22
賦值運算符怎麼樣?該操作員可以使用嗎? – 2011-02-13 16:12:53
「如何在不使用乘法或除法運算符的情況下在C中實現pow(a,b)」?我不會。 – 2011-02-13 16:16:40