char*数组转化为double的有关问题

char*数组转化为double的问题
#include "stdlib.h"
#include "stdio.h"
double strold(const char *str);
int main(){
char *str;
double rst=0;
str=(char*)malloc(100*sizeof(char));
str="-12345678912345678911111111.4444";
stol(str);
return 0;
}
double stol(const char *str){
double sum=0,fac=10;
int negflag=0;
if(*str){
if(*str=='-'){
negflag=1;
str++;
}
while(*str!='.' && *str){
sum=sum*10+int(*str)-48;
str++;
}
str++;
while(*str){
sum=sum+(int(*str)-48)/fac;
fac=fac*10;
str++;
}
if(negflag==1)
sum=0-sum;
printf("%lf",sum);
return sum;
}
else{
printf("warning:字符串为空");
return 0;
}
}

上面这段程序,char* str="-12345678912345678911111111.4444",但是再转化为double时最后结果变成了-12345678912345679000000000.000000 结果和预想的不一样,请教大神如何解决?才能得到char*所包含字符转换的double

------解决方案--------------------
double的有效位数是15-16位,当然是这样的结果啦
------解决方案--------------------
double的有效位只有十几位,所以。。。
可以自己构造一个更强的double类型
------解决方案--------------------
探讨

如何才能将char*数组中的值全部表示出来呢?