Vladislav
[cling]$ (double)std::numeric_limits<long double>::max()
(double) inf
Andrei
Andrei
в х64 архитектуре long double 8 байт.
Vladislav
Andrei
в стандарт давно заглядывали?
Andrei
там ни слова про размер типа
Vladislav
Vladislav
оно umplementation-specific
Andrei
Vladislav
Andrei
я в курсе)
Как минимум https://godbolt.org/g/tsBMRx поэтому.
Andrei
Там вот это было сказано.
Andrei
Если размер может быть одинаковый, то «потеря точности по идее» не всегда должна идти.
Vladislav
Vladislav
вообще, когда уже в x64 положат quadruple precision? Даже на спарках уже есть
Aidar
Constantine
Vladislav
в новых спарках обещают
Constantine
а кому-то нужно вообще, кроме понтов?
Vladislav
для олимпиадок)
Constantine
ахахахаха
Vladislav
мне приходилось в одном из hacker rank'ов __float128 юзать, кстати
Vladislav
без него не хватало точности
Vladislav
но там совсем безумная задача была
Constantine
Хотя я недавно забавную вещь узнал от знакомого. Unity по умолчанию считает в float. У него есть две последовательности отсчетов-точек2d от времени, ему надо посчитать сумму квадратов отклонений как функцию смещения одного множества. Он тупнул что ее можно просто выразить по теореме Штейнера через квадрат расстояния центров масс, пошел считать втупую, вывел квадратичную форму для каждой пары и сложил все
Vladislav
Vladislav
даже в даблах
Constantine
не
Constantine
координаты до 10^3
Constantine
вычисление устойчивое
Vladislav
сумму квадратов отклонений от среднего надо?
Constantine
короче в итоге он получил квадратичную форму типа (x - 10^3)^2 + 1 в развернутом виде
Constantine
x^2 - 2000*x + 1000001
Constantine
там все норм, есть нижняя граница абсолютной погрешности
Constantine
но флоатов недостаточно)
Constantine
в даблах такое выражение нормально посчитается, оно фейлит примерно квадрат от 10^3 = 6 знаков
Vladislav
я к тому что если x близок к 1000, то будет неприятно
Constantine
ну да, но это проблема "надо из 200001 вычесть 2000000"
Constantine
если представить вычисление в fixed point, будет зафейлено только 6 знаков
Vladislav
ну то есть можно было бы и во флотах посчитать, если считать правильно
Constantine
ну если среднюю точку взять и записать в форме (x - a)^2 + b где b >= 0 то можно начальное в флоатах
Constantine
там будет только 3 знака, а не 6
Constantine
Constantine
так-то там теорема Штейнера M(X-a)^2 = DX + (MX - a)^2
Constantine
О! Есть специалисты по бустовой геометрии? Там реализована функция "вычислить область внутри невыпуклого многоугольника, состоящую из точек, удаленных не менее, чем на d от границы многоугольника, в виде объединения многоугольников"?
Constantine
Как это по-человечески сделать вообще?
Vladislav
Constantine
Короче, я в свое время такое почти написал
Constantine
Там есть единственная проблема, когда ответ - не единственный многоугольник
Constantine
Основной алгоритм основан на известной фишке (в ПТЗ точно была), что можно просто по биссектрисам точки начального многоугольника двигать
Vladislav
хотя..
Vladislav
http://www.boost.org/doc/libs/1_62_0/libs/polygon/doc/gtl_polygon_set_concept.htm
Vladislav
вот тут operator- - не оно?
Constantine
если я понял там intersections
Constantine
это значит, что он может вернуть самопересекающуюся фигуру?
Vladislav
хм
Vladislav
не знаю)
Vladislav
вот тут пейпер про алгоритмы для этой задачи http://www.ics.uci.edu/~goodrich/pubs/tol-cgta.pdf
Constantine
Vladislav
Constantine
для невыпуклых все работает то же самое, НО
Constantine
в какой-то момент если ответом будет не одна фигура, надо это понять
Vladislav
вот в cgal точно есть http://doc.cgal.org/latest/Straight_skeleton_2/index.html
Vladislav
с описанием алгоритма, опять же
Constantine
спасибо, надо будет поизучать
Constantine
как они решили задачу о самопересечении флоатового многоугольника
Constantine
а, я понял 😆
Pepe 🐸
Есть такие же задачи для трехмерных фигур
Vladislav
Igor
Vladislav
Igor
У Blaze бенчмарки хороши были, помнится
Igor
что сейчас для линейной алгебры самое перфомансное?