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:
Code:
class Number
{
public:
double num1; //first part: 3.45
double num2; //second part: -400
//and a bunch of custom operators
};
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.
If you were to indicate the purpose of doing this, perhaps a better solution could be found.