f32::ZERO and f64::ZERO are currently +0.0, which is not the additive identity. For non-NaN f32 and f64 under default rounding, the additive identity is -0.0 and not +0.0, since (-0.0) + (+0.0) == (+0.0) but (-0.0) + (-0.0) == (-0.0). (EDIT: interpreting == bitwise.)