4

powCでの使用を避けようとしています。

pow(2,16)と書けるが1<<16、どう表現すればよいのpow(2,-16)だろうか?もしそうなら1/(1<<16)、私は0を得る。

誰でも助けてもらえますか?

4

4 に答える 4

6

ldexpこの関数は、浮動小数点の 2 の累乗に使用できますldexp(1, -16)

これは効率的であり、プラットフォームが浮動小数点数を仮数とバイナリ指数 (該当する場合) として格納するという事実を利用することが期待でき1 << 16ます。

于 2013-01-08T15:34:14.553 に答える
2

負のべき乗は、数値をべき乗してから反転することを意味します。

あなたが遭遇する問題はかなり単純です: 整数から始めると、これはすべて整数演算で行われます。この場合、反転すると 2 つの可能な結果しかありません: 1/1 は明らかに 1 を返します。 1/(何か > 1) は 0 になります。

意味のある結果を得るには、通常、小数の結果を表現できるように浮動小数点に変換する必要があります:1/(double)(1<<16)または1.0/(1<<16).

powまたは、標準ライブラリから使用することもできます。

于 2013-01-08T15:34:03.850 に答える
1

int ではなく float を使用してください。

#include <stdio.h>
#include <math.h>


int main(int argc, char **argv) {
  printf("%f %f\n", pow(2,3), pow(2,-3));

  printf("%d %f\n", (1<<3), 1.0/(1<<3));

  return 0;
}

結果:

bf@bf-laptop:~/playground$ ./test
8.000000 0.125000
8 0.125000
于 2013-01-08T15:35:37.690 に答える
0

1/(1<<16)すべてそうであるようintに、それは整数の結果に型キャストされ、したがって として取得され0ます。タイプキャストしてfloat結果を見てみませんか。

(float)1.0/(1<<16)
于 2013-01-08T15:35:19.460 に答える