Это проблема с числами с плавающей точкой - они приблизительны, и странные вещи происходят в нуле (то есть появляются странные представления).Из-за этого некоторые операции с числами, которые вы принимаете как должное, нужно обрабатывать более деликатно.
При сравнении двух чисел вы не можете просто сказать a == b
, потому что одно из них может быть 0
идругие -1.03583e-13
из-за потери точности по операциям с плавающей запятой, применяемым для получения a
и b
.Вы должны выбрать произвольный допуск, например: fabs(a,b) < 1e-8
.
При печати номера вам часто нужно ограничить количество напечатанных цифр.Если вы используете printf
, вы можете сказать printf("%g\n", a);
, что не будет печатать такие вещи, как -1.03583e-13
.Я не знаю, есть ли iostream
аналог %g
;там есть?