2011-10-25 8 views
1

long doubleを使用すると、doubleより精度が悪くなります。 3.14159265358979323846264Llong double constをソースコードで記述するとよいですか、L以外のものを追加する必要がありますか?精度が長いdouble doubleより悪い

EDIT 私はこの問題を解決しました。アルゴリズムをより正確に変更します。

+0

どのプラットフォーム/アーキテクチャ/コンパイラですか?実際に何を観察しましたか? – tenfour

+0

いいえ、「L」は正しいです。 – trojanfoe

+4

あなたはもっと自分自身を説明する必要があります。 doubleを使用するコード、long doubleを使用するコード、それぞれの結果、および結果が間違っていると思われる理由を示してください。 –

答えて

5

あなたの精度は悪くありません。

何が起こっているのかは、数値をプリントアウトすると、ストリームライブラリが表示された値を切り捨ててしまうことです。特定の精度を得るには、std :: setprecisionを使用します。

double  x = 1.0/3; 
long double y = 1.0/6; 

// Prints out the precision 
std::cout << "Limit: " << std::numeric_limits<double>::digits10 << "\n"; 
std::cout << "Limit: " << std::numeric_limits<long double>::digits10 << "\n"; 

// prints the numbers with max precision. 
std::cout << std::setprecision(std::numeric_limits<double>::digits10) << x << "\n"; 
std::cout << std::setprecision(std::numeric_limits<long double>::digits10) << y << "\n";