?

Log in

No account? Create an account
nyaload

Журнал Пушыстого

Журнал Пушыстого

Previous Entry Share Flag Next Entry
π++
nyaload
_winnie
в С++ нет числа π в стандартной библиотеке. M_PI/_USE_MATH_DEFINES зачем-то сломали в g++ при использовании -std=c++11, а взамен ничего не предложили.

http://stackoverflow.com/questions/1727881/how-to-use-the-pi-constant-in-c

В результате проще в каждом cpp файле копипастить строчку «const double pi = 3.14159265358979323846;» (или «constexpr auto pi = 3.14159265358979323846» в c++11, или acos(-1) вместо константы).

--------------
PS. этот пост дубликат предыдущего, предыдущий я удалил из-за этого бага. Уже оставленные чужие коментарии достал из почты, скопирую в комментарии.
Tags:


  • 1
( скриншот )

alll А зачем нужно число пи в стандартной библиотеке? Собственно, зачем вообще какие-то нетривиальные математические функции в стандартной библиотеке, являющейся частью языка? Типа "если б я был король, я б жил лучше, чем король - ведь я таки ещё немножечко шью"?


_winnie Не понял.
Если в стандартной библиотеке нет чего-то, что часто нужно, и при этом быстро реализуется копипастой 1-5 строк - то вскоре эта копипаста расползается по миллиону мест.
Например, данное решение об удалении M_PI - приведёт к куче разнобразных определений числа pi в каждом сотом .cpp файле.
Кстати, оценка каждый сотый файл с числом π - в данном случае не совсем с неба, я проверил на большой кодобазе с кучей библиотек (искал '\bM_PI\b' и '\b3.141', использование кастомных констант MY_LIBRARY_PI=3.14159... не считал)


alll Если что-то достаточно часто используется в нормальных проектах, то со временем появляются общедоступные библиотеки, реализующие это что-то. Впихивать без мыла в стандарт _языка_ то, что не относится собственно к языку - дешёвый популизм, усугублённый нежеланием делать нормальную поддержку модулей и поддерживать публичный сайт для обмена такими модулями (см. например CPAN). Лучше пусть приличные рефлекшены сделают. :)
> приведёт к куче разнобразных определений числа pi в каждом сотом .cpp файле
Скорее в каждом стотысячном. Кмк ты сильно преувеличиваешь частоту казуального использования этой константы. :)
В любом случае если у кого нет способности рационально организовывать свой код, тому засорение языка левыми константами (сказавши pi, придётся сказать e, g, c, h и т.п.) определённо не поможет. :)


bik_top Закон Годвина:
> А зачем нужно число пи в стандартной библиотеке?
Тем более, что в сторонних библиотеках всё есть; гляньте как удобно: boost::math::double_constants::pi или даже boost::math::constants::pi()
> усугублённый нежеланием делать нормальную поддержку модулей
Hitler on C++17


Аноним: А комплексные числа есть? Если да, то π и e должны быть обязательно.


bik_top Tau manifesto:
> Если да, то π и e должны быть обязательно.
Хрен с ним с π, но для 2π константа должна быть обязательно.


_winnie Ну да, можно pi выразить через acos(-1), atan2(0, -1), и imag(log(complex(-1, 0))) для комплексных чисел.
Но так сложнее читать читается, и требует дополнительных строчек кода.



Edited at 2015-10-28 10:35 pm (UTC)

Код сломался; там был пример шаблонного пи: boost::math::constants::pi<NumberType>()

> Hitler on C++17

Зачотно!

> Этот пост дубликат предыдущего, предыдущий я удалил из-за этого бага. Уже оставленные чужие коментарии достал из почты, скопирую в комментарии.

Удивительно трепетное отношение к комментариям!

Как уже сказали, в бусте есть.

Зачем же в каждом cop писать? static const в свой хидер и включать его по надобности.


Протаскивать файл на все машины, и добавлять include/path в настройку компилятора, и протаскивать этот файл всем пользователям своего кода (преподавателям/однокурсникам/снипет кода в форуме) - менее тривиально, чем копипастить однострочники :(

А если бы оно было в math.h на всех компиляторах - тогда можно смело делиться компилирующимся снипетом кода, без "ну вы ещё инсталлируйте boost".


Edited at 2015-10-29 10:18 pm (UTC)

Ну понятно, что если бы было, то было бы хорошо. Но я ж имел тоже вариант с уже готовым цельным проектом, где пути инклудов настраиваются под использующуся билд систему, а не какими-то непонятными обрывками.

  • 1