¿Por qué existen M_PI_2, M_PI_4, M_1_PI y M_2_PI?

bordes:

Yo entiendo por qué tenemos esto en las cabeceras estándar:

#define M_PI       3.14159265358979323846   // pi

Sin embargo, no veo mucho de que dichos estudios:

#define M_PI_2     1.57079632679489661923   // pi/2
#define M_PI_4     0.785398163397448309616  // pi/4
#define M_1_PI     0.318309886183790671538  // 1/pi
#define M_2_PI     0.636619772367581343076  // 2/pi

¿Hay alguna ventaja en el uso de estos en lugar de M_PI/2, M_PI/4, 1/M_PIy 2/M_PIen código real? (En el 2020 y más allá?)

No son las expresiones enunciadas de salida mucho más legible?


Estoy pidiendo un par de razones realmente.

En primer lugar, un día he mezclado accidentalmente M_PI_2y M_2_PI(y tal vez incluso 2 * M_PI). Tomó un tiempo para averiguar algo estaba mal, y después de eso tomó otro tiempo para averiguar qué era exactamente la causa raíz. Aún así creo que no es muy obvio lo que M_PI_2y M_2_PImedia, si son sólo de lectura de códigos de usarlos y no ve las definiciones. Y ¿por qué debería memorizar algo así? Por lo tanto, es seguro decir que el uso de estas definiciones es en realidad un anti-patrón que se degrada la legibilidad del código?

En segundo lugar, teniendo estas definiciones disponible todavía puede ser un problema, por ejemplo, en Windows (Visual C ++) . En lugar de definir todo esto, prefiero definir solamente M_PI, y luego digo M_PI/2, y no M_PI_2en el código. ¿Se me escapa algo?

R .. GitHub dejar de ayudar a ICE:

Debido a 2 y 4 son potencias de dos, M_PI_2y M_PI_4realmente son redundantes y 100% equivalente a M_PI/2y M_PI/4. Sin embargo, M_1_PIno es necesariamente equivalente a 1/M_PI; el último tiene dos redondeos (aproximación de pi, entonces división inexacta) en lugar de sólo uno (aproximación de 1 / pi).

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=369711&siteId=1
Recomendado
Clasificación