2011-10-25 4 views
1

Lorsque j'utilise long double j'obtiens une plus mauvaise précision que d'utiliser double. 3.14159265358979323846264L est-ce bon d'écrire long double const dans le code source ou je devrais ajouter quelque chose d'autre que L?Precision long double pire que double

EDIT J'ai résolu le problème. Je change d'algorithme pour être plus précis.

+0

Quelle plate-forme/architecture/compilateur? Qu'avez-vous réellement observé? – tenfour

+0

Non, 'L' est correct. – trojanfoe

+4

Vous allez devoir vous expliquer plus. Montrez-nous du code en utilisant le double, du code en utilisant le double long, les résultats de chacun, et pourquoi vous pensez que les résultats sont faux. –

Répondre

5

Vous n'obtenez pas une plus mauvaise précision.

Ce qui se passe est que lorsque vous imprimez le numéro, la bibliothèque de flux tronque la valeur affichée. Utilisez std :: setprecision pour obtenir une précision spécifique.

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";