乗算または除算演算子を使用しません。 加算演算子と減算演算子のみ使用できます。Cでpow(a、b)をどのように実装しますか?条件は次のとおりです。 -
答えて
無意味な問題が、対数の性質に解ける:
pow(a,b) = exp(b * log(a))
= exp(exp(log(b) + log(log(a)))
は、あなたの指数関数と対数関数が同じベースを使用していることを保証するように注意してください。
はい、私はスライダーを使用する方法を知っています。そのトリックを学ぶことで、あなたの対数の見方が変わります。
これは 'exp(b * log(a))'ではありませんか? 「pow(a、b)」は、通常、「bの力に上げられた」という意味であり、それ以外の意味ではありません。 –
@Sergey、ええと...ええ。ありがとう。 – dmckee
整数の場合は、pow(a、b)をaのb乗法に変換するのは簡単です。あなたがそれらを結合する場合は、あなたが捕虜を作ることができるの追加
a * a = a + a + a + a + ... ; // do this a times
に* aをオンにする
pow(a, b) = a * a * a * a ... ; // do this b times
とシンプル。
まず、mult(int a、int b)を作成し、それを使ってpowを作ります。
再帰的なソリューション:
#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));
}
大きな指数のためにこれは悲惨に失敗します:) –
@mzabskyなので、コードは決して実行されません! –
あなたはすでに純粋にFPのためだけで純粋に整数のための答えを得ています。 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の補数などの代わりに "バイアス"数として格納されます。それを使って作業するのは不器用です(基本的に、バイアスからそれぞれの演算を減算し、演算を行い、オーバーフローをチェックし、オーバーフローしていないと仮定してバイアスをもう一度加えます)。
論理テストを一切行わずに仕事をしているのは、実際には意図されていなかったように思えます。かなりの数のコンピュータアーキテクチャークラスでは、ハードウェアで直接表現できる基本的な操作(ビットシフト、ビット単位 - ビット単位 - AND
、 - OR
、 - NOT
など)に問題を減らすのは面白いです。上記の実装は、 (技術を手に入れたいのであれば、加算器にはいくつかのゲートが必要ですが、VHDL、Verilogなどですが、VHDLやVerilogなどのものに含まれています)。
- 1. Restrictions.Disjunction()条件Aと条件B OR条件c AND条件dの
- 2. 「a <= b && b <= a && a!= b」はどのように真実になりますか?
- 3. なぜa + = b * pow(10、c-i-1)== 99 C++ですか?
- 4. C++では、A + = BがA = A + Bよりも好都合です。++ AはA ++になりますか?
- 5. Math.abs(a-b) - Math.abs(c-d)の実装は高速ですか?
- 6. SQL ServerのA $$$ B $$$$$$ C $$$$$$$$ D文字列からA $ B $ C $ DまたはA%B%C%Dを取得するにはどうすればよいですか?
- 7. elasticsearchクエリで次の条件を実装するにはどうすればよいですか?
- 8. 、二つの条件の代わりに、3つのテーブルA、BおよびCがあり
- 9. 私はcoqに(A/\ B)/ \ C == A/\ B/\ Cを納得させるにはどうすればよいですか?
- 10. ポリマーdom-if:どのように負の条件を実装しますか?
- 11. AとBがモナドの場合、A [B [C]]をB [A [C]]に変換するにはどうすればよいですか?
- 12. \ bはどのように実装されていますか?
- 13. ["a"、 "b"、 "c"]の "a、b、c" .split( "、")のメリットは何ですか?
- 14. {a-b、b-c、c-a}から{(a、b)、(b、c)、(c、a)}に変更しますか?
- 15. サブソニッククエリ条件A AND((条件B AND条件C)OR(条件D AND条件E AND条件F)
- 16. '(a b c)と(a' b 'cをリストする)の違いは何ですか?
- 17. BとCを指定して "A&B = C"でAを回復する可能性はありますか?
- 18. は、どのように私は単純化することによって〜B + ACを得ることができます(〜A〜B)+(AC)+(A〜B〜C)
- 19. 1つの条件aが正であり条件bが負である条件を見つける
- 20. どのようにC#でIRandomAccessStreamを実装できますか?
- 21. [(a、b)、(c、d)]と[[a、b]、[c、d]]の違いは何ですか?
- 22. x = function(a、b、c){}と関数x(a、b、c){}の違いは何ですか?
- 23. SonarQube A、B C、DおよびEの評価はどのように計算されますか?
- 24. Javaでは、aとbはブール値です。&& bとb && aは同じ結果になりますか?
- 25. Luaのインライン条件(a == b? "yes": "no")?
- 26. "A-> B; A-> C; C-> B"のような三角マージでgitブレークしますか?
- 27. 複数の条件でPHPでif条件を実行するにはどうすればよいですか?
- 28. どのように 'と'の条件を行うのですか?
- 29. ユニットaタイプはどのような条件の下でですか?
- 30. は条件付きで、私は次の関数実装しました
比較演算子はありません。 – bdonlan
代入演算子はどうですか?その演算子を使用できますか? –
"乗算または除算演算子を使用せずにCでpow(a、b)をどのように実装しますか?"私はしません。 –