訂正:やはり、sscanfにはfloatしか渡せないみたい。
結論:標準の 文字列->倍精度浮動小数 の精度には疑問が残った。

#include<stdio.h>
#include<iostream>
#include<sstream>

int main()
{
double dResult;float fResult;char buf[255];
std::cout << "original data:" << "200.123456789012" << std::endl;
sprintf(buf,"%f",(200.123456789012));
sscanf(buf,"%f",&fResult);
sscanf(buf,"%f",&dResult);
std::cout << fResult << std::endl;
std::cout << dResult << std::endl;
printf("%.15g\n",fResult);
printf("%.15g\n",dResult);

sscanf(buf,"%.15g",&fResult);
sscanf(buf,"%.15g",&dResult);
std::cout << fResult << std::endl;
std::cout << dResult << std::endl;
printf("%.15g\n",fResult);
printf("%.15g\n",dResult);

std::cout << "strtod" << std::endl;
char *stopstring;
double dResult2 = strtod(buf,&stopstring);
std::cout << dResult2 << std::endl;
printf("%.15g\n",dResult2);

std::cout << "atof" << std::endl;
double dResult3 = atof(buf);
std::cout << dResult3 << std::endl;
printf("%.15g\n",dResult3);

std::cout << "stringstream" << std::endl;
double dResult4;
std::stringstream stream;
stream << buf;
stream >> dResult4;
printf("%.15g",dResult4);

double Test = 200123456789012;//地道に変換したことを考える。
Test *= 1E-12;
printf("%.15g\n",Test);//これぐらいの精度は欲しい。
}