- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
Флоат даёт ошибки только тогда, когда он плывёт.
На вычислении всяких косинусов он не плывёт - поэтому ошибки там врядли возможны.
Точность не будет падать - её не будет, вместо неё будет округленчиский мусор.
Каким образом у вас это получилось - я не знаю, ибо у меня cos(M_PI_2) = ноль. 2.0f*2.0f = 4.0.
Конпелятор всегда знает, ибо нормальные про-пацаны юзают фичи конпелятора, и умеют писать код.
В гцц есть такие штуки - builtin_*() - ими запиленны аналоги самых популярных libc функций.
ГГЦ абсалютно точно умеет определять константы - для этого есть свой builtin_constant_p() -
который в любом куске кода тебе 100% скажет - константа эта перменная, либо нет.
Дак вот, в гцц даже можно писать так:
static const double cos_pi = cos(M_PI);//глобальная статик-константа, которая в компилтайме инициализируется результатом вызова функции cos(). Это не особо профитно, ибо издревли система констант в Си лютое говно.
Так же в гцц есть атрибуты, один из которых const - он говорит, что твоя функция не имеет побочных эффектов.
И все функции, которые их не имеют - принято так помечать, особенно в glibc и libgcc.
А всё почему? Патамучто их пишут более-менее про-пацаны.
Конпелятору не нужно ничего знать - знает программист, который пишет, а конпелятор должен предоставить ему фичи,
с которыми он может пилить нормальный код, а не говно.
А неосиляторам подавай оптимизиторы, автоматизаторы и прочую ересь, от которой толка нет, а гонору много.