Foro de elhacker.net

Programación => Java => Mensaje iniciado por: casidus en 10 Febrero 2010, 22:38 pm



Título: como calcular el seno y el coseno en java???????????
Publicado por: casidus en 10 Febrero 2010, 22:38 pm
hola me gustaria saber como calcular el seno y el coseno en java sin usar el math.sin ni el math.cos
esk llevo bastante intentandolo mediante el teotema de taylor pero nada no me sale ni para atras.


gracias por todo


Título: Re: como calcular el seno y el coseno en java???????????
Publicado por: egyware en 10 Febrero 2010, 22:56 pm
Wow, es un poco reinventar la rueda pero bueno
tienes 2 opciones linkear nativamente(usando JNI) y usar las funciones de C sin y cos o hacer el teorema de taylor.
Mira como consejo asegurate de tener una buena aproximacion como 2 o más decimales
Para eso desarrolla algunas series de Taylor no se talves hasta n = 4
http://es.wikipedia.org/wiki/Coseno#El_coseno_como_serie_de_Taylor (http://es.wikipedia.org/wiki/Coseno#El_coseno_como_serie_de_Taylor)
Por qué no posteas lo que llevas yo una vez hice la funcion logaritmo natural en java sin usar Math pero tenia como 4 decimales exactos
bueno postea lo que llevas y ahi te ayudamos ;)
Saludos


Título: Re: como calcular el seno y el coseno en java???????????
Publicado por: casidus en 10 Febrero 2010, 23:16 pm
si echo no tengo nada esk lo intento hace a papel para haber si me acuerdo como se hacia pero nada


Título: Re: como calcular el seno y el coseno en java???????????
Publicado por: egyware en 10 Febrero 2010, 23:25 pm
si echo no tengo nada esk lo intento hace a papel para haber si me acuerdo como se hacia pero nada
Bueno eso es distinto prueba buscando en google,
recuerda que Taylor es una funcion aproximada a otra funcion.


Título: Re: como calcular el seno y el coseno en java???????????
Publicado por: casidus en 10 Febrero 2010, 23:32 pm
algo asi para el coseno estaria bien
 
Código
  1.    public static double coseno(double x)
  2.  
  3.      {
  4.  
  5.         int i;
  6.  
  7.         double s = 0;
  8.  
  9.         int signo = 1;
  10.  
  11.  
  12.  
  13.         for(i=0; i<10; i+=2)
  14.  
  15.         {
  16.  
  17.            s += signo*pow(x, i) / factorial(i);
  18.  
  19.            signo *= -1;
  20.  
  21.         }
  22.  
  23.  
  24.  
  25.         return s;
  26.  
  27.      }
  28.  

y para el seno esto??

Código
  1.   public static double seno(double x)
  2.  
  3.      {
  4.  
  5.         int i;
  6.  
  7.         double s = 0;
  8.  
  9.         int signo = 1;
  10.  
  11.  
  12.  
  13.         for(i=1; i<10; i+=2)
  14.  
  15.         {
  16.  
  17.            s += signo*pow(x, i) / factorial(i);
  18.  
  19.            signo *= -1;
  20.  
  21.         }
  22.  
  23.  
  24.  
  25.         return s;
  26.  
  27.      }
  28.  


Título: Re: como calcular el seno y el coseno en java???????????
Publicado por: casidus en 10 Febrero 2010, 23:57 pm
programa echo al final me ha salido

Código:

   import cs1.Keyboard;
   import java.io.*;
   import java.util.*;
    public class EX04 {
    
    
       public static float cosinus (float graus)
      
      {
      
         int i;
      
         float s = 0;
      
         int signo = 1;
      
      
      
         for(i=0; i<10; i+=2)
        
         {
        
            s += signo*pow(graus, i) / factorial(i);
        
            signo *= -1;
        
         }
      
      
      
         return s;
      
      }
  
  
  
       public static float sinus (float graus)
      
      {
      
         int i;
      
         float s = 0;
      
         int signo = 1;
      
      
      
         for(i=1; i<10; i+=2)
        
         {
        
            s += signo*pow(graus, i) / factorial(i);
        
            signo *= -1;
        
         }
      
      
      
         return s;
      
      }
  
  
  
       public static float factorial(int graus)
      
      {
      
         int i;
      
         float fact = 1;
      
      
      
         for(i=1; i<=graus; i++)
        
            fact *= i;
      
      
      
         return fact;
      
      }
  
  
  
       public static float pow(float graus, int n)
      
      {
      
      
      
         int i;
      
         float pow =1;
      
      
      
         if(graus==0)
            return 0;
      
      
      
         for(i=1; i<=n; i++)
        
            pow = pow*graus;
      
      
      
         return pow;
      
      }
    
  
       public static void main(String args[]) {
         float graus, cos,sin;
         System.out.println("entra el valor per saber el sinus y el cossinus: ");
         graus=Keyboard.readFloat();
         graus=graus*(float)(Math.PI/180);
        
         cos=cosinus(graus);
         sin=sinus(graus);
         System.out.println("Sinus: "+sin);
         System.out.println("cosinus: "+cos);
      
      }
  
  
  
  
      
   }

supongo k esta bien sino, ya me direis algo, tiene algo de perdida de precision pero es k para este ejercicio nos hacen usar floats


Título: Re: como calcular el seno y el coseno en java???????????
Publicado por: egyware en 11 Febrero 2010, 00:18 am
 ;-) bien felicitaciones
bueno si quieres mas precision ajusta la funcion de taylor que calcule mas numero por supuesto eso conlleva mas tiempo de cpu
Saludos


Título: Re: como calcular el seno y el coseno en java???????????
Publicado por: casidus en 11 Febrero 2010, 00:22 am
k tendria k ajustar para mas precision????


Título: Re: como calcular el seno y el coseno en java???????????
Publicado por: egyware en 11 Febrero 2010, 00:29 am
Recuerda que Taylor es una serie que tiende al infinito, lamentablemente el infinito no esta en la computadora
para eso se usa las series evaluadas en un numero, por ejemplo vi por ahi un for talvez aumentando el rango del for puedas obtener unos decimales mas de precision.


Título: Re: como calcular el seno y el coseno en java???????????
Publicado por: armandor10 en 14 Septiembre 2011, 04:24 am
Hola amigo lo que pasa es que no entiendo la parte de las 2 funciones que hicistes del sinus y cossinus dentro de estas tienen el mismo codigo y sin embargo dan valores completamente diferentes... si me puedes explicar te agradeceria