programacion matematicas lenguaje funciones ejemplos c++ c++11 constexpr cmath

c++ - matematicas - Funciones matemáticas constexpr



funciones matematicas en lenguaje c ejemplos (3)

Noté en esta página que ninguna de las funciones matemáticas en c ++ 11 parece hacer uso de constexpr, mientras que creo que todas podrían serlo. Así que eso me deja con dos preguntas, una es por qué eligieron no hacer las funciones constexpr.

Esta parte está muy bien respondida por Sebastian Redl y Adam Szaj, así que no le agregaremos nada.

Y dos para una función como sqrt, probablemente podría escribir mi propio constexpr, pero algo como el pecado o la cos sería más complicado, así que está a mi alrededor.

Sí, puede escribir su propia versión de constexpr sin, cos usando las expansiones de la serie taylor de estas funciones. Echa un vistazo a este super genial github repo que implementa varias funciones matemáticas como funciones Morwenn/static_math

Noté en esta page que ninguna de las funciones matemáticas en c ++ 11 parece hacer uso de constexpr, mientras que creo que todas podrían serlo. Así que eso me deja con dos preguntas, una es por qué eligieron no hacer las funciones constexpr. Un dos para una función como sqrt , probablemente podría escribir mi propio constexpr, pero algo como el pecado o la cos sería más complicado, así que está a mi alrededor.


De "The C ++ Programming Language (4th Edition)", por B. Stroustrup, describiendo C ++ 11:

"Para ser evaluada en tiempo de compilación, una función debe ser adecuadamente simple: una función constexpr debe consistir en una única declaración de retorno; no se permiten bucles, y no se permiten variables locales. Además, una función constexpr puede no tener efectos secundarios".

Lo que significa que debe estar en línea, sin para, while y if sentencias y variables locales. Los efectos secundarios también están prohibidos (ej: cambio de errno). Otro problema es que la mayoría de las funciones matemáticas son instrucciones FPU que no están representadas en c / c ++ puro (están escritas en código de ensamblador). Es por eso que la función no de cmath se declara como constexpr.


En realidad, debido al legado antiguo y molesto, casi ninguna de las funciones matemáticas puede ser constexpr , ya que todas tienen el efecto secundario de configurar errno en varias condiciones de error, generalmente errores de dominio.