Конференция "Прочее" » Глупый вопрос: сравнение double
 
  • KSergey © (17.11.08 06:18) [0]
    Как сравнить 2 double? На равенство и неравенство?
    Учитывая, что хочется универсального метода для неизвестного порядка сравниваемых величин, т.е. сравнение вроде

    abs(d1 - d2) < eps

    упирается в выбор eps, с чем легко пролететь как показывает практика. Кроме всего прочего так же крайне интересуют скоростные характеристики.

    Хотелось бы выведать кто чего знает по этому вопросу.
  • Дуб © (17.11.08 06:36) [1]
    Кнут. 2 том. 4 глава.
  • MBo © (17.11.08 06:51) [2]
    Math.SameValue
  • Юрий Зотов © (17.11.08 08:13) [3]
    > KSergey ©   (17.11.08 06:18)  

    > упирается в выбор eps

    Погуглите термины "машинный ноль" и "машинное эпсилон". Сильно поможет в автоматическом выборе eps.
  • TUser © (17.11.08 08:20) [4]
    А в чем проблема с выбором эпс? Несколько раз так писал, для конкретной задачи всегда было ясно, какое число есть очень маленькое.
  • Рамиль © (17.11.08 08:57) [5]
    Сравнение вещественных числе обычно применяется в физических задачах. А там eps определяется постановкой (ну зачем, например, космический корабль сажать с точностью до миллиметра, или рассчитывать прочность до грамм для нескольких тонн). Так что спустись с небес теории на грешную землю практики и не будет возникать таких вопросов;)
  • Дуб © (17.11.08 09:07) [6]
    > Рамиль ©   (17.11.08 08:57) [5]

    Это как бы хорошо, но вот при вычислении корня из отрицательного числа возникает неприятное. И что с того, что число получившееся лишь физически незначительно отличалось от 0? Например.
  • Рамиль © (17.11.08 09:30) [7]

    > Это как бы хорошо, но вот при вычислении корня из отрицательного
    > числа возникает неприятное.

    В смысле? Вообще то, если попробовать вычислить корень из отрицательного, получим runtime error.
  • Дуб © (17.11.08 09:34) [8]
    > Рамиль ©   (17.11.08 09:30) [7]

    Вот именно. Получим. То есть получим существенно иное поведение при почти равных числах.

    Ну и при дрейфе можем в итоге насчитать разное, что мимио Луны сядем. :) Воспрос не праздный как раз для практики ведь.
  • Рамиль © (17.11.08 09:53) [9]

    > Дуб ©   (17.11.08 09:34) [8]

    А, понял. Но тут тоже надо индивидуально подходить. Проверять надо:) И тут все равно eps согласно задаче (или, для ленивых, возвести в квадрат)
  • Альф (17.11.08 10:11) [10]
    При физических расчетах обычно eps ~= погрешности измерений...
  • Jeer © (17.11.08 10:12) [11]
    Стандартно опеределенные esp:

    const
     FuzzFactor = 1000;
     ExtendedResolution = 1E-19 * FuzzFactor;
     DoubleResolution   = 1E-15 * FuzzFactor;
     SingleResolution   = 1E-7 * FuzzFactor;
  • MsGuns © (17.11.08 11:38) [12]
    Без приложения к конкретной предметной области сабж и впрям глуп
  • KSergey © (17.11.08 12:20) [13]
    > Jeer ©   (17.11.08 10:12) [11]
    > Стандартно опеределенные esp:

    Не не, только не стандартные, проходили.

    > MsGuns ©   (17.11.08 11:38) [12]
    > Без приложения к конкретной предметной области сабж и впрям глуп

    хотелось совершенно универсального решения... Вдруг оно есть, а я о том не знаю? :)

    Спасибо ответившим, изучаю.
  • KilkennyCat © (17.11.08 12:34) [14]

    > Ну и при дрейфе можем в итоге насчитать разное, что мимио
    > Луны сядем. :)


    Зачем Луна? Пункты приема металлолома на Марсе.
  • Дуб © (17.11.08 12:44) [15]

    > KilkennyCat ©   (17.11.08 12:34) [14]

    Ну, мы то свой металлолом пека только на Луне продали.
  • Anatoly Podgoretsky © (17.11.08 13:17) [16]
    > KilkennyCat  (17.11.2008 12:34:14)  [14]

    Только в Фобос не попади.
  • KSergey © (18.11.08 14:52) [17]
    Cтатья про сравнение даблов. И подход там интересный описан (во второй примерно половине, где к int их кастят):
    http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm
 
Конференция "Прочее" » Глупый вопрос: сравнение double
Есть новые Нет новых   [134446   +31][b:0][p:0.001]