como calcular el seno y el coseno en java???????????

Iniciado por casidus, 10 Febrero 2010, 22:38 PM

0 Miembros y 1 Visitante están viendo este tema.

casidus

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

egyware

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
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

casidus

si echo no tengo nada esk lo intento hace a papel para haber si me acuerdo como se hacia pero nada

egyware

Cita de: 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
Bueno eso es distinto prueba buscando en google,
recuerda que Taylor es una funcion aproximada a otra funcion.

casidus

#4
algo asi para el coseno estaria bien
Código (java) [Seleccionar]
   public static double coseno(double x)
     
     {
     
        int i;
     
        double s = 0;
     
        int signo = 1;
     
     
     
        for(i=0; i<10; i+=2)
       
        {
       
           s += signo*pow(x, i) / factorial(i);
       
           signo *= -1;
       
        }
     
     
     
        return s;
     
     }


y para el seno esto??

Código (java) [Seleccionar]
  public static double seno(double x)
     
     {
     
        int i;
     
        double s = 0;
     
        int signo = 1;
     
     
     
        for(i=1; i<10; i+=2)
       
        {
       
           s += signo*pow(x, i) / factorial(i);
       
           signo *= -1;
       
        }
     
     
     
        return s;
     
     }

casidus

programa echo al final me ha salido



  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

egyware

 ;-) 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

casidus


egyware

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.

armandor10

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