取得

2017-01-05 3 views
-5

私はその一部に私のプログラムが正しく取得

コンパイラは機能していなかったため、エラー使用があったことに気づい.Then私はC++でプログラムを作成していたまあ: - のDev C++

2^38ある

と仮定N1 = 274877906944 - :

エラーは、このでした。 log(n1)は38でなければなりません。今度は、n2 = 274877906942をn1よりも小さくする。

だから我々は、ログ(N2)を計算するならば、それは私にログ(N1).Butログ(N2)未満を与えなければならない私に間違っている38 あるログ(N1)と同じ結果を与えたことを意味します! !!

誰かがあなたのための丸めのあなたが結果を参照してください。..

+6

あなたは私たちにあなたのコードを表示した場合、私たちはより良いあなたを助けることができます。 –

+2

['log2'](http://en.cppreference.com/w/cpp/numeric/math/log2)は' float'または 'double'を返します - どのように整数を取得していますか? – UnholySheep

+0

#include #include using namespace std; int main() { long double n; cin >> n; cout << log(n)/ log(2); return 0; } –

答えて

2

をこのようなものを説明してください。

std::cout << std::fixed; 
std::cout << std::setprecision(16); 
std::cout << static_cast<double>(274877906944) << std::endl; 
std::cout << static_cast<double>(274877906942) << std::endl; 
std::cout << static_cast<double>(274877906948) << std::endl; 

std::cout << log2(274877906944) << std::endl; 
std::cout << log2(274877906942) << std::endl; 
std::cout<< log2(274877906948) << std::endl; 

が生成されます:

274877906944.0000000000000000
274877906942.0000000000000000
274877906948.0000000000000000
、あなたの精度を向上させる場合、それは(<cmath>log2機能がdoubleにあなたの整数をキャストすることに注意してください)大丈夫だろう 38.0000000000000000
37.9999999999895053
38.0000000000209965

Demo

+0

だから私は入力する必要がdouble.Thutに仕事をするだろうか?または私はちょうど倍の価値を取るだろうか? –

+2

'log2'は既に' double'を返しています。その結果を 'double'に格納し、それを適切に表示するために、私が示したように、有効な数字の数を増やす必要があります。 – AndyG