0xd34df00d
18.10.2012 13:54 Aedalus
Как проверить два числа на относительную близость друг к другу?
Recommended by:
@pooq: моча съела говно
нужна фабрика абстрактных итераторов, я думаю. И про паттерн "Визитор" не забудь.
std::fabs(x-y) < eps
> относительную
Мудак, читай таск.
ах да, чуть не забыл: плюсы — говно.
И прокси-фасад.
Мои.
шаришь
fabs(a — b)/sqrt(a*a + b*b)
блядь што
define 'относительная'
Што ?
2 * (x — y) / (x + y) блеать!
Плохо для x = -y.
Гм, любопытно.
Дыа, или модули вместо квадратов :З
Ну и без корня. Вы кароч понели.
Модули — плохо. test (0.0001, -0.0001, epsilon = 1) что должно вернуть?
не любопытно, а охуенно. ноль при равенстве, единица — если одно из чисел ноль и корень из двух (максимум), если обратные по знаку
А, кстати. да, говно. /17 тебе тоже адресуется.
нормировать кто будет, ебанашка?
Ебанашка и будет, да ^^
U
Зачем нормировать на квадраты?
√2 будет. относительно абсолютных своих величин эти числа максимально различаются.
ГАГАГА БАГЕТ
Корень из двух больше 1, а мне кажется, что test (0.0001, -0.0001, eps = 1) должно вернуть true, ибо они достаточно близки.
да иди ты нахуй, «близки». если у тебя другие величины порядка 1e-38, то эти числа нихуя не близки. а задача стоит именно в том чтобы измерить два числа на относительную близость, и относительно друг друга они нихуя не близки. моя норма даёт значение большее единицы (и меньшее корня из двух) для значений с противоположным знаком только. а при одинаковом знаке получаются значения в отрезке от нуля до единицы.
Ты нахуй иди, мне неочевидна корректность и разумность твоего алгоритма.
КОКОКО, она тебе не очевидна, потому что у тебя нету критериев корректности.
>да иди ты нахуй
>Ты нахуй иди
Как будто на заседание РАН попал.
заседание РАЕН.
А у тебя есть?
Для меня критерий корректности — разумность работы на test(+x, -x, eps), а разумность здесь мне не очевидна.
ПСТАН
ок, хочешь учитывать эпсилон? засунь его тоже под корень с некоторым коэффициентом. появится при этом ещё проблема, что не будет чёткой границы разделяющей числа одного знака от чисел с разным знаком. но зато для твоего примера test (0.0001, -0.0001, eps = 1) оно будет давать результат ≈2e-8, т.е. относительно столь огромного эпсилона, эти числа реально близки
2e-4, конечно же
при весе эпсилона равном единице
Че блядь? Под какой корень? Что ты несешь вообще?
test(a, b, eps) = fabs(a — b) / sqrt(a * a + b * b + eps)
А сравниваь с чем?
с единицей, да. или с эпсилоном делённым на произведение a и b по модулю
Из бесконечной метрики берешь и строишь конечную с той же топологией: d'(x,y) = d(x,y) / (1 + d(x,y)), d(x,y), например, |x-y| => 0 при совпадении, |x-y| = 1 при максимальном различии.
Хуйню написал, имел ввиду так: например, |x-y| в качестве d => = 0 при совпадении, = 1 при максимальном различии.
крутота
> корректность, разумность, критерии
> относительная близость
омг, куда я попал
алсо, горжусь вот этим своим ответом на тему флоатов http://stackoverflow.com/a/4951103/53117...
*попеарился*
Гм, это же на первой паре численных методов рассказывают, что должна задаваться невязка для решения.
как бы да — но ты почитай тот тред, там никто об этом не упоминал. Я должен был высказаться!
Капитан дальнего видения :)
tl;dr что там?
Мсье вещает о том, что нельзя взять и просто так сделать цикл по while (a != b), где a и b — числа с плавающей точкой.
эй, ты всё напутал, можно!
грязный хацкер ;[
В страну отсутствия четкого ТЗ.
you.dont.say.jpg
Yep.
Так ты применил уж что-то по сабжу ? Например, то, что я в 43 писал.
Мы решили, что занимаемся хуйней, ибо на самом деле нам надо сравнивать вероятности в (0; 1), а мы чего-то дженериками объебались.
>Мы решили, что занимаемся хуйней
Типичный сириез бизнес ин совиет раша.
А то! :3
дык, сформулируй
Для тебя это типично.