Точность зависит от величины исходных чисел. В плавающей точке компьютер представляет число 312 внутри как научную запись:
3.12000000000 * 10 ^ 2
Десятичные разряды в левой части (мантисса) фиксированы. Показатель степени также имеет верхнюю и нижнюю границы. Это позволяет ему представлять очень большие или очень маленькие числа.
Если вы попытаетесь добавить два одинаковых по величине числа, результат должен остаться одинаковым по точности, потому что десятичная точка не должна двигаться:
312.0 + 643.0 <==>
3.12000000000 * 10 ^ 2 +
6.43000000000 * 10 ^ 2
-----------------------
9.55000000000 * 10 ^ 2
Если вы попытаетесь добавить очень большое и очень маленькое число, вы потеряете точность, потому что они должны сжаться в указанном выше формате. Рассмотрим 312 + 12300000000000000000000. Сначала вам нужно масштабировать меньшее число, чтобы выровнять с большим, а затем добавить:
1.23000000000 * 10 ^ 15 +
0.00000000003 * 10 ^ 15
-----------------------
1.23000000003 <-- precision lost here!
С плавающей точкой можно обрабатывать очень большие или очень маленькие числа. Но он не может представлять оба одновременно.
Что касается добавляемых двойных и двойных чисел, int немедленно превращается в двойное, тогда применяется вышеприведенное.