Информация об изменениях

Сообщение Re[9]: [забыл математику] Оптимизация алгоритма от 20.09.2022 12:37

Изменено 20.09.2022 13:08 xma

Re[9]: [забыл математику] Оптимизация алгоритма
Здравствуйте, Real 3L0, Вы писали:

R3>flag_test_optimal2 = True

это мой код — всегда верно

R3>flag_test_Serge_Novikoff = False

это код от Serge_Novikoff — часто выдаёт неверный результат

R3>flag_test_Serge_Novikoff_fixed = True

это пофикшенный мною код (посредством использования DecimalEpsilon) от Serge_Novikoff — теперь тоже всегда верно

R3>Эээ, что-то это мне не нравится.

R3>Девятки эти в периоде. Из-за них и значения кажутся не совпадающими, пока не округлишь.

какие проблемы, "Вася" — округляй до двух знаков после запятой результат .. (если тебе так надо)

R3>Рассчитывать DecimalEpsilon — это как? Под каждый набор входящих атрибутов?


DecimalEpsilon — это точность сравнения например с нулем или около окрестностей точки (числа с плавающей точкой),

ну т.е. (например) если DecimalEpsilon = 0.000001, то все числа по модулю меньшие этого числа считаются нулём ..

R3>У Serge_Novikoff более понятный алгоритм (если без DecimalEpsilon)


так он у него неверный смотри что он (ret_opt_Serge_Novikoff) выдаёт (в твоей цитате) в сравнении с твоими оригинальным кодом (ret_original)

мой код (ret_opt2) и пофикшенный от Serge_Novikoff c DecimalEpsilon выдают результат (ret_opt_Serge_Novikoff_fixed) с точностью неотличимой от оригинала (ret_original) до одной миллионной (можно повысить или понизить точность, уменьшая или увеличивая значение константы DecimalEpsilon)
Re[9]: [забыл математику] Оптимизация алгоритма
Здравствуйте, Real 3L0, Вы писали:

R3>flag_test_optimal2 = True

это мой код — всегда верно

R3>flag_test_Serge_Novikoff = False

это код от Serge_Novikoff — часто выдаёт неверный результат

R3>flag_test_Serge_Novikoff_fixed = True

это пофикшенный мною код (посредством использования DecimalEpsilon) от Serge_Novikoff — теперь тоже всегда верно

R3>Эээ, что-то это мне не нравится.

R3>Девятки эти в периоде. Из-за них и значения кажутся не совпадающими, пока не округлишь.

какие проблемы, "Вася" — округляй до двух знаков после запятой результат .. (если тебе так надо)

R3>Рассчитывать DecimalEpsilon — это как? Под каждый набор входящих атрибутов?


DecimalEpsilon — это точность сравнения например с нулем или около окрестностей точки (числа с плавающей точкой),

ну т.е. (например) если DecimalEpsilon = 0.000001, то все числа по модулю меньшие этого числа считаются нулём ..

R3>У Serge_Novikoff более понятный алгоритм (если без DecimalEpsilon)


так он у него неверный смотри что он (ret_opt_Serge_Novikoff) выдаёт (в твоей цитате) в сравнении с твоими оригинальным кодом (ret_original)

мой код (ret_opt2) и пофикшенный от Serge_Novikoff c DecimalEpsilon выдают результат (ret_opt_Serge_Novikoff_fixed) с точностью неотличимой от оригинала (ret_original) до одной миллионной (можно повысить или понизить точность, уменьшая или увеличивая значение константы DecimalEpsilon)

P.S.:

Real 3L0, могу подробнее объяснить свой алгоритм если интересно :

напр., при исходных значениях 90.1 и 0.2 получаем 90.2, (т.е. 90+0.2),

а проверка (if) в конце сделано чтобы когда напр. при исходных значениях 90 и 0.2, из за того что всё разделится нацело и до (if) получим 90.2 (90+0.2), а результат должен быть просто 90 ..

(поэтому то что получили до (if) проверяем на равенство сумме исходных чисел (marketBuyPrice + overwriteMinStep), если равно (с учётом окрестностей, т.е. с отклонением до плюс минус DecimalEpsilon) то значит из результата нужно вычесть overwriteMinStep (т.е. в нашем примере 0.2))

вот такой простой алгоритм ..