Есть несколько вещей, на которые стоит обратить внимание.
Во-первых, float
(и в этом отношении double
) подписано, поэтому значения могут быть положительными или отрицательными (или нулем).
Другое дело, что дальность зависит от точности. Если вы попытаетесь установить для float
значение, которое меньше абсолютного значения, чем оно может обработать, например 1E-50
, оно будет установлено на ноль, а не на ошибку; это то, что вы получаете, когда округляете 1 × 10 -50 с точностью, с которой оно может справиться, в то время как если вы попытаетесь дать ему значение, превышающее абсолютное значение, с которым оно может справиться, например 1E50
, то для него будет задано значение ∞ (или -∞ для -1E50
), потому что, опять же, это так же точно, как оно может представлять нечто такое большое.