История изменений
Исправление anonymous_incognito, (текущая версия) :
У меня такое ощущение, что ты не совсем понимаешь, что делаешь. Например, нельзя сравнивать вещественные числа с максимальной точностью: обычно это бессмысленно, если только в конкретной программе ты очень хорошо понимаешь что делаешь, но скорее всего, это будет грязноватый хак, чреватый непереносимостью и даже зависимостью от версии компилятора.
Если действительно нужны объяснения, лучше всего потратить время на чтение книги, где эти вещи ясно изложены.
Могу посоветовать эту «Вычислительные методы для инженеров» группы авторов: https://libgen.pw/item/detail/id/8858?id=8858 Там прочитай главу 2. «Введение в элементарную теорию погрешностей.»
Особенно параграф 2.5 «Особенности машинной арифметики»
Пока же могу посоветовать сравнивать с машинным эпсилон.
if (fabs(a-b)<=epsilon) { }
Машинное эпсилон - это такое число:
double epsilon=1;
while((epsilon+1)!=1)
epsilon=epsilon/2;
Для каждого типа эпсилон своё. У меня это получилось 1.110223e-16
Исходная версия anonymous_incognito, :
У меня такое ощущение, что ты не совсем понимаешь, что делаешь. Например, нельзя сравнивать вещественные числа с максимальной точностью: обычно это бессмысленно, если только в конкретной программе ты очень хорошо понимаешь что делаешь, но скорее всего, это будет грязноватый хак, чреватый непереносимостью и даже зависимостью от версии компилятора.
Если действительно нужны объяснения, лучше всего потратить время на чтение книги, где эти вещи ясно изложены.
Могу посоветовать эту «Вычислительные метода для инженеров» группы авторов: https://libgen.pw/item/detail/id/8858?id=8858 Там прочитай главу 2. «Введение в элементарную теорию погрешностей.»
Особенно параграф 2.5 «Особенности машинной арифметики»
Пока же могу посоветовать сравнивать с машинным эпсилон.
if (fabs(a-b)<=epsilon) { }
Машинное эпсилон - это такое число:
double epsilon=1;
while((epsilon+1)!=1)
epsilon=epsilon/2;
Для каждого типа эпсилон своё. У меня это получилось 1.110223e-16