The size of a double is limiting the precision you can attain. You may just have to accept that it is not possible to store a value that low.
However, what you could do, is create your own class/structure that stores scientific notation:
This would equate to 3.45*10^-400. This may be a possible way to store really small or really large numbers. You would have to create a few operators to deal with this abnormal numerical type, but it shouldn't be too hard.
double num1; //first part: 3.45
double num2; //second part: -400
//and a bunch of custom operators
If you were to indicate the purpose of doing this, perhaps a better solution could be found.