LINUX.ORG.RU

История изменений

Исправление 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