Возможно ли деление на ноль в следующем случае из-за ошибки с плавающей запятой при вычитании?
float x, y, z;
...
if (y != 1.0)
z = x / (y - 1.0);
Другими словами, безопаснее ли следующее?
float divisor = y - 1.0;
if (divisor != 0.0)
z = x / divisor;
if (y != 1.0)
? - person jrd1   schedule 10.10.2012y != 1.0
запрещено. - person ev-br   schedule 10.10.20120.0
(или1.0
)? Еслиy - 1.0
достаточно мало илиx
достаточно велико, вы получитеinf
даже дляdivisor != 0
, так что это не поможет предотвратить это, и, вероятно, будет проще проверитьinf
после деления, а затем определить, когда деление даст вам бесконечность. . Таким образом, даже если оба пути кода идентичны, это не имеет никакого значения для безопасности. - person Grizzly   schedule 10.10.20121.0
— это неfloat
, аdouble
. - person John Dibling   schedule 10.10.2012