MQL4 StringToDouble / StrToDouble alters the value of the variable?

 
MQL4 documentation states that the value limits for double type variables is:

"Minimal Positive Value" = 2.2250738585072014e-308
"Maximum Value" = 1.7976931348623158e+308. 
(See https://docs.mql4.com/basis/types/double)

So why does StringToDouble alter the value converted?

Or am I doing one thing unawares here while expecting a different result?

void OnStart()
{
string s1 = "5554535251504900090807060504030201";
double d1 = StringToDouble(s1);
string s2 = DoubleToString(d1);

Print("s2<",s2,">");
printf("d1<%035.8f>",d1);
Print("s1<",s1,">");
     
return;
}


Here's what I get when I run that code:

s1<5554535251504900090807060504030201>
d1<5554535251504899684469244159852544.00000000>
s2<5554535251504899684469244159852544>



5554535251504900090807060504030201 amounts to 5.55454E+33.

Obviously, that doesn't even come remotely close to the 1.7976931348623158e+308 limit. 

What is changing the value of the variable? What am I missing here?

Real Types (double, float) - Data Types - Language Basics - MQL4 Reference
Real Types (double, float) - Data Types - Language Basics - MQL4 Reference
  • docs.mql4.com
Real types (or floating-point types) represent values with a fractional part. In the MQL4 language there are two types for floating point numbers.The method of representation of real numbers in the computer memory is defined by the IEEE 754 standard and is independent of platforms, operating systems or programming languages. Floating-point...
 
Doubles only have 15 digits of accuracy.
          Double-precision floating-point format - Wikipedia, the free encyclopedia
Reason: