乗算または除算演算子を使用しません。 加算演算子と減算演算子のみ使用できます。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. Math.abs(a-b) - Math.abs(c-d)の実装は高速ですか?
- 4. SQL ServerのA $$$ B $$$$$$ C $$$$$$$$ D文字列からA $ B $ C $ DまたはA%B%C%Dを取得するにはどうすればよいですか?
- 5. サブソニッククエリ条件A AND((条件B AND条件C)OR(条件D AND条件E AND条件F)
- 6. 私はcoqに(A/\ B)/ \ C == A/\ B/\ Cを納得させるにはどうすればよいですか?
- 7. AとBがモナドの場合、A [B [C]]をB [A [C]]に変換するにはどうすればよいですか?
- 8. ["a"、 "b"、 "c"]の "a、b、c" .split( "、")のメリットは何ですか?
- 9. \ bはどのように実装されていますか?
- 10. Luaのインライン条件(a == b? "yes": "no")?
- 11. '(a b c)と(a' b 'cをリストする)の違いは何ですか?
- 12. x = function(a、b、c){}と関数x(a、b、c){}の違いは何ですか?
- 13. どのようにC#でIRandomAccessStreamを実装できますか?
- 14. log(a * b)はlog(a)+ log(b)より常にMatlabで高速ですか?
- 15. nchar(substitute(a + b + c))は実際に何をカウントしますか?
- 16. 条件時にマルチパートのSpecFlowフックを実装するにはどうすればよいですか?
- 17. どのようにマゼンタで条件を行うのですか?
- 18. `a = b ||を実行できますか? Rubyでc?
- 19. Functorは(a - > b) - >(f a - > f b)であり、(cカテゴリ)=> c a b - > c(f a)(f b)とは何か?
- 20. jqueryセレクタ、 "a + b + c + d"はどのように解釈されますか
- 21. クイックサンドで2組のフィルタ条件を実装しています
- 22. C++でシグナルとイベントをどのように実装しますか?
- 23. インターフェイスはタイプAを公開しますが、実装にはタイプB(Aのサブクラス)が必要です
- 24. Cブロックは式になります:({int a = 1; int b = 2; a + b;})は3に等しくなります
- 25. C/C++/ASM:Multiply CPUにa = a * 2 + bを追加しますか?
- 26. 式a^= b^= a^= bにシーケンスポイントがありますか、それとも未定義ですか? <code>^=</code>よう </p> <pre><code>int a = 10; int b = 42; a ^= b ^= a ^= b; /*Here*/ printf("a=%d, b=%d\n", a, b); </code></pre> <p>しかし、私は思ったんだけど、複合代入演算子は次のとおりです。
- 27. ハスケル: `Map(a、b)c`と` Map a(Map b c) `の違いは?
- 28. A、B、Cにインデックスがある場合、A、Bのインデックスは冗長ですか?
- 29. a.compareTo(b)がcompareTo(a、b)またはa.method(b)= method(a、b)と等しいのはなぜですか?
- 30. 条件変数の実装
比較演算子はありません。 – bdonlan
代入演算子はどうですか?その演算子を使用できますか? –
"乗算または除算演算子を使用せずにCでpow(a、b)をどのように実装しますか?"私はしません。 –