Vladislav
[cling]$ (double)std::numeric_limits<long double>::max() (double) inf
Andrei
в long double экспонента выше
такого типа больше нет.
Andrei
в х64 архитектуре long double 8 байт.
Vladislav
в х64 архитектуре long double 8 байт.
[cling]$ sizeof(long double) (unsigned long) 16
Vladislav
Andrei
в стандарт давно заглядывали?
Andrei
там ни слова про размер типа
Vladislav
оно umplementation-specific
Andrei
[cling]$ sizeof(long double) (unsigned long) 16
на это нельзя закладываться.
Andrei
я в курсе)
Как минимум https://godbolt.org/g/tsBMRx поэтому.
Andrei
Там вот это было сказано.
Andrei
Если размер может быть одинаковый, то «потеря точности по идее» не всегда должна идти.
Vladislav
Там вот это было сказано.
ок, правильнее говорить что либо не изменится либо inf
Vladislav
такого типа больше нет.
вот это - тоже некорректное утверждение)
Andrei
в long double экспонента выше
Да, но это тогда тоже неправда :)
Vladislav
вообще, когда уже в x64 положат quadruple precision? Даже на спарках уже есть
Vladislav
а что, аппаратно поддерживается?
нет, я и жду, когда же поддержат)
Vladislav
в новых спарках обещают
Constantine
а кому-то нужно вообще, кроме понтов?
Vladislav
для олимпиадок)
Constantine
ахахахаха
Vladislav
мне приходилось в одном из hacker rank'ов __float128 юзать, кстати
Vladislav
без него не хватало точности
Vladislav
но там совсем безумная задача была
Constantine
Хотя я недавно забавную вещь узнал от знакомого. Unity по умолчанию считает в float. У него есть две последовательности отсчетов-точек2d от времени, ему надо посчитать сумму квадратов отклонений как функцию смещения одного множества. Он тупнул что ее можно просто выразить по теореме Штейнера через квадрат расстояния центров масс, пошел считать втупую, вывел квадратичную форму для каждой пары и сложил все
Vladislav
даже в даблах
Constantine
не
Constantine
координаты до 10^3
Constantine
вычисление устойчивое
Vladislav
сумму квадратов отклонений от среднего надо?
Constantine
короче в итоге он получил квадратичную форму типа (x - 10^3)^2 + 1 в развернутом виде
Constantine
x^2 - 2000*x + 1000001
Vladislav
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
ну если среднюю точку взять и записать в форме (x - a)^2 + b где b >= 0 то можно начальное в флоатах
еще можно попробовать в такой форме все квадратичные записывать, но я не изучал, что получится
Constantine
так-то там теорема Штейнера M(X-a)^2 = DX + (MX - a)^2
Constantine
О! Есть специалисты по бустовой геометрии? Там реализована функция "вычислить область внутри невыпуклого многоугольника, состоящую из точек, удаленных не менее, чем на d от границы многоугольника, в виде объединения многоугольников"?
Constantine
Как это по-человечески сделать вообще?
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
как они решили задачу о самопересечении флоатового многоугольника
Vladislav
как они решили задачу о самопересечении флоатового многоугольника
ооо, в cgal-е у них свой адаптивный arbitrary precision как раз для этого
Constantine
а, я понял 😆
Pepe 🐸
Есть такие же задачи для трехмерных фигур
Igor
https://amp.meduza.io/shapito/2017/06/15/programmisty-kotorye-ispolzuyut-dlya-otstupov-probely-okazalis-bogache-teh-kto-zhmet-klavishu-tab
>в среднем использование пробелов в коде вместо табуляции увеличивает зарплату на 8,6 процента Это так феерически звучит xD
Igor
У Blaze бенчмарки хороши были, помнится
Igor
что сейчас для линейной алгебры самое перфомансное?