El problema es la división de enteros en la parte más interna de la expresión, que trunca el valor (omitiendo la parte fraccional). Una opción, como se mencionó, es hacer que cada constante sea un número de punto flotante, ya sea agregando ".0" o "f" después de él. Alternativamente, puede omitir por completo los paréntesis de la expresión más interna.Como M_PI
es un número de punto flotante, y la multiplicación en C es asociativa de la izquierda (lo que significa que procede de izquierda a derecha) la primera multiplicación (2 * M_PI) se promoverá en un flotante, como lo hará cada multiplicación sucesiva. Como cos()
devuelve un flotador, pNumber
se le asignará un flotante sin haber realizado ninguna división entera, por lo tanto, no habrá pérdida de precisión. (Nota: generalmente no es aconsejable contar con la asociatividad o precedencia del operador, pero en este caso solo intento demostrar que de hecho funcionaría)
En cuanto al rango de números que debe esperar ver , recuerde que el coseno (sin modificar) varía de -1 a +1, no de 0 a 1, por lo que realmente verá -100 a 100 (en teoría). Para obtener el rango correcto, le gustaría agregar 1, luego multiplicar por 50.
Por cierto, los errores de compilación que obtiene en el primer caso se deben a que pi
no está definido. La guía para usar M_PI
es correcta: para las constantes matemáticas, siempre es más inteligente (y más consistente) usar lo que proporciona el sistema. Si tiene curiosidad, en Leopard estas constantes están # definidas en Math.h, líneas 528-540. Puede abrir el archivo usando Archivo> Abrir rápidamente ... (Cmd-Shift-D) y escribiendo "Math.h", o haciendo doble clic en M_PI
en su código mientras mantiene presionado Comando.
Primero, haré que mis constantes floten. – Nosredna