Ответ, как и в большинстве задач с плавающей точкой, заключается в том, что C работает с ограниченной точностью.И поплавки являются двоичными.Они не могут точно представлять десятичное число 1.99 - оно, вероятно, будет близким значением, например 1.990000000023....
.
Стандартная ссылка для этих задач: Что должен знать каждый учёный-компьютерщик с плавающей точкой
К счастью, есть простое решение (но не идеальное!)Найдите корень (num * 10000.0), используя приращение в единицу.Это, конечно, будет в 100 раз больше, чем вы хотите.Следовательно, последние две цифры - это те «десятичные знаки», которые вы хотели.Вы обнаружите, что корень 40000.0 точно равен 200.0. Это работает, потому что 1.0
может быть прекрасно представлено.
Цена, которую вы платите за точность на том конце, состоит в том, что вы теряете его на другом конце - умножение на 10000 означает, что вы получите потерю точности с более высокими числами.Простые решения редко бывают без недостатков, извините.