You have to define what floating point format you are using. Standard IEEE $64-$bit floating point assigns $53$ bits to the mantissa, giving a precision of about $16$ decimal digits. $10^{38}$ will be represented by some $53$ bit mantissa times a binary exponent. To add to that, you have to match the exponents, and $3.0$ will be shifted far to the right, which means in floating point $10^{38}+3.0=10^{38}$ exactly and when you subtract off $10^{38}$ you will get $0$. As long as the larger number is at least $10^{16}$ times the smaller this will happen.