Consider the following code:
double d = double.MaxValue;
BigInteger bi = new(d);
Console.WriteLine(d.ToString("#"));
Console.WriteLine(bi.ToString());
This yields the following result:
179769313486232000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368
The BigInteger representation of this value contains seemingly random numbers, whilst the double representation contains 294 trailing zeros. Both are the same length.
Why is this, and what are those seemingly random numbers?