Título: Ayuda con el siguiente programa. Publicado por: padiuwu en 9 Agosto 2018, 19:45 pm Haga un programa donde dado como dato un ángulo en grados, los convierta a
radianes y calcule e imprima todas las funciones trigonométricas de ese ángulo. *Coma calcular sin la libreria math.h Código: #include <iostream> Título: Re: Ayuda con el siguiente programa. Publicado por: MAFUS en 9 Agosto 2018, 20:08 pm Ahora la pregunta.
Título: Re: Ayuda con el siguiente programa. Publicado por: padiuwu en 10 Agosto 2018, 02:20 am Tengo mi prgrama a media en este caso este ya transforma los que es los angulos a radianes, pero no se como calcular lo demas, necesito un ejemplo, tengo algunas formulas pero no se si sean las correctas.
Título: Re: Ayuda con el siguiente programa. Publicado por: engel lex en 10 Agosto 2018, 02:25 am lamentablemente con eso no dices nada...
muestra tu codigo e indica donde tienes la duda exactamente y de forma detallada Título: Re: Computo de funciones trigonométricas Publicado por: dijsktra en 31 Agosto 2018, 15:23 pm Como dices, tu solución carece de "valor" en tanto que utilizas la librería <math.h>, que resuelve el problema que se te pide.
El cálculo de funciones trigonométricas se puede abordar desde muchos puntos de vista (calculo numérico, teoremas de trigonometría), pero todos ellos serán imprecisos en sus resultados en la medida que el sistema de tipos de C, (float) esta limitado en su capacidad para representar, no digamos ya cualquier número real, si no muchos números racionales, por ejemplo (1/3). El clásico método para aproximar la función seno ( el resto, coseno y tangente, investigalos por tu cuenta) se basa en el Teorema de Taylor que permite el cómputo del valor de sen en términos de operraciones elementales, productos, sumas, potencias y divisiones: Código: sinus(x) = sum i : 0<= i : (((-1)^i)/(2i+1)!)*x^(2i+1) Como no es posible extenderme puesto que no es un curso de análisis numérico, baste decir que en toda implementación hay que tener en cuenta la precisión con la que abordamos el problema, en nuestro caso, hasta las diezmilésimas (10^-4) Allá va el código. La línea central, la más compleja de elaborar, es la 28. Expplicar de donde se saca es un poco complejo sin entrar en manipulaciones algebraicas. Baste decir que t es el sumando correspondeinte al valor n. Lo que hace 28 es actualizar t para la siguiente vuelta, y esto se puede hacer en función del valor que tiene actualmente t. Código
Y a continuación, la salida a algunos casos de angulos conocidos, como son aquellos de seno 0,1,-1 y 0.5. La primera columna marca el ánglo en grados, la segunda en radianes (aproximado) y la tercera la función seno del mismo....Se aprecia como en el caso de 360 grados cuyo seno es 0, arroja una aproximaci'on de 0,0001 Código: 0 90 180 270 360 El último caso es llamativo, pues da un error incoherente...El seno sólo puede ser entre -1 y 1. Nuevamente, se debe a la imprecisión para representar numeros grandes, y ciertamente, si te fijas en el producto del código de la línea 28, esta incluye un valor "relativamente grande", que float es incapaz de representar. Ojo a los errores en el cálculo numérico! Título: Re: Ayuda con el siguiente programa. Publicado por: CalgaryCorpus en 31 Agosto 2018, 21:37 pm Podria evitarse el overflow al convertir el angulo gigante en el pequeno equivalente, por ejemplo
Código
2 mejoras a esto: - En vez de iterar restando 360, dividir por 360, y luego restar directamente la cantidad de veces que cabe 360 en el numero gigante. - Algo similar hay que hacer para angulos negativos gigantes Título: Re: Ayuda con el siguiente programa. Publicado por: dijsktra en 3 Septiembre 2018, 15:08 pm Podria evitarse el overflow al convertir el angulo gigante en el pequeno equivalente, por ejemplo Código
2 mejoras a esto: - En vez de iterar restando 360, dividir por 360, y luego restar directamente la cantidad de veces que cabe 360 en el numero gigante. - Algo similar hay que hacer para angulos negativos gigantes Solo puedo decir una cosa : GENIAL. No creo que sea un defecto por el posible overflow, (de hecho me parece que no hay overflow, como dije antes...) El algoritmo mismo exige 0 <= r <= 2pi Propongo, para simplificar tantos positivos como negativos grandes, la macro Código
Aunque el operador (%) solo admite int, y ni podamos meter "floats". Código
Ahora, tnemeos Código: 0 90 180 270 360 Como Dios manda.... ;-) Título: Re: Computo de funciones trigonométricas Publicado por: Serapis en 3 Septiembre 2018, 15:48 pm El clásico método para aproximar la función seno ( el resto, coseno y tangente, investigalos por tu cuenta) se basa en el Teorema de Taylor que permite el cómputo del valor de sen en términos de operraciones elementales, productos, sumas, potencias y divisiones: El algoritmo eficaz para todo esto es el algoritmo CORDIC.... que lo resuelve con sumas restas y desplazamiento de bits... |