Precisão C ++: String to Double
Estou tendo um problema com a precisão de um duplo depois de executar algumas operações em uma seqüência de caracteres convertida em duplo.
#include <iostream>
#include <sstream>
#include <math.h>
using namespace std;
// conversion function
void convert(const char * a, const int i, double &out)
{
double val;
istringstream in(a);
in >> val;
cout << "char a -- " << a << endl;
cout << "val ----- " << val << endl;
val *= i;
cout << "modified val --- " << val << endl;
cout << "FMOD ----- " << fmod(val, 1) << endl;
out = val;
return 0;
}
Este não é o caso de todos os números inseridos como uma sequência, portanto, o erro não é constante. Afeta apenas alguns números (34,38 parece ser constante).
No minuto, ele retorna isso quando passo em a = 34,38 e i = 100:
char a -- 34.38
Val ----- 34.38
modified val --- 3438
FMOD ----- 4.54747e-13
Isso funcionará se eu alterar o Val para um float, pois há menor precisão, mas preciso de um dobro.
Isso também é reproduzido quando eu uso atof, sscanf e strtod em vez de sstream.
Em C ++, qual é a melhor maneira de converter corretamente uma seqüência de caracteres em um duplo e realmente retornar um valor preciso?
Obrigado.