If the data on the link corresponds to an integer, MLGetReal() will coerce it to a double before storing it in x.
If the data on the link corresponds to a number outside the range that can be stored in a C double on your computer system, then MLGetReal() will fail, and return 0.
You can get arbitrary-precision real numbers by first using RealDigits to generate lists of digits, then calling MLGetIntegerList().