Libreria math.php

Iniciado por Erik#, 24 Julio 2009, 21:34 PM

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

Erik#

Bueno, os dejo un tipo de libreria de matematicas con diversas funciones utiles, raiz cuadrada y raiz cubica dadas por SnakeDrak :P (Thx)

Código (php) [Seleccionar]
<?php
error_reporting
(0);
function 
mcd($x$y){ // saber el mcd de dos cifras
$aux $x;
      if(
$x<$y){
        
$x=$y;
        
$y=$aux;
      }
      while((
$r=$x%$y)!=0){
        
$x=$y;
        
$y=$r;
     }
     return 
$y;
}
 
function 
mcm($x$y){ // se requiere mcd() - Saber el mcm de dos cifras
return (($x*$y)/(mcd($x,$y)));
}

function 
nPrimo($n){ // saber si un numero es primo
$ret=1;
      for(
$i=2$i<$n && $ret==1;$i++){
        if((
$n%$i)==0$ret=0;
      }
      return 
$ret;
}

function 
nxPrimo($i){ // saber el primo que va detras de otro
$ret=$i+1;
      while(
nPrimo($ret)==0)
        
$ret++;
      return 
$ret;
  }
 
function 
cateto($h$c){ // saber el cateto de una hipotenusa
$c1 $c $c;
$h1 $h $h;
$a $c1 $h1;
return raiz_q($a);
}
function 
hipotenusa($c1$c2){
$cc1 $c1*$c1;
$cc2 $c2*$c2;
$a $cc1+$cc2;
return raiz_q($a);
}


function 
elevar($n$c){ // elevar un numero a otro
$ret 1;
for($i 0$i $c$i++){
$ret $ret*$n;
}
return $ret;
}

function 
raiz_q($n,$c=2){ // raices
return pow($n,1/$c);
}

?>

Nakp

Ojo por ojo, y el mundo acabará ciego.

Erik#

Cita de: Nakp en 24 Julio 2009, 22:15 PM
http://www.php.net/manual/en/book.math.php

sqrt()

No quiero una función ya hecha, ya se que existe, pero quiero crear mi propia función, igual que las potencias, existe pow, pero yo cree la de elevar();

Nakp

como ejercicio de programación y lógica es factible, pero realmente es útil para PHP?
Ojo por ojo, y el mundo acabará ciego.

Erik#

No, pero es util para mi aprendizaje y tener una optativa a las funciones standard de PHP que en casos remotos puede saltar error :P

SnakeDrak

#5
Hola,

Pues muy fácil, la raíz cuadrada es igual a:

Número de la raíz elevado a 1/2.

Es decir, que te quedaría:

Código (php) [Seleccionar]

function raiz_q($n){
     return elevar($n,0.5);
}


La podrías adaptar para raízes cúbicas y tal:

Código (php) [Seleccionar]

function raiz_q($n,$c){ // $n raíz a calcular, $c tipo (cuadrada sería 2)
      return elevar($n,1/$c);
}


Saludos!

Erik#

#6
Cita de: SnakeDrak en 24 Julio 2009, 23:19 PM
Hola,

Pues muy fácil, la raíz cuadrada es igual a:

Número de la raíz elevado a 1/2.

Es decir, que te quedaría:

Código (php) [Seleccionar]

function raiz_q($n){
     return elevar($n,0.5);
}


La podrías adaptar para raízes cúbicas y tal:

Código (php) [Seleccionar]

function raiz_q($n,$c){ // $n raíz a calcular, $c tipo (cuadrada sería 2)
     return elevar($n,1/$c);
}


Saludos!

Resultado total:

Código (php) [Seleccionar]
<?php
error_reporting
(0);
function 
mcd($x$y){ // saber el mcd de dos cifras
$aux $x;
      if(
$x<$y){
        
$x=$y;
        
$y=$aux;
      }
      while((
$r=$x%$y)!=0){
        
$x=$y;
        
$y=$r;
     }
     return 
$y;
}
 
function 
mcm($x$y){ // se requiere mcd() - Saber el mcm de dos cifras
return (($x*$y)/(mcd($x,$y)));
}

function 
nPrimo($n){ // saber si un numero es primo
$ret=1;
      for(
$i=2$i<$n && $ret==1;$i++){
        if((
$n%$i)==0$ret=0;
      }
      return 
$ret;
}

function 
nxPrimo($i){ // saber el primo que va detras de otro
$ret=$i+1;
      while(
nPrimo($ret)==0)
        
$ret++;
      return 
$ret;
  }
 
function 
cateto($h$c){ // saber el cateto de una hipotenusa
$c1 $c $c;
$h1 $h $h;
$a $c1 $h1;
return raiz_q($a);
}
function 
hipotenusa($c1$c2){
$cc1 $c1*$c1;
$cc2 $c2*$c2;
$a $cc1+$cc2;
return raiz_q($a);


function 
elevar($n$c){ // elevar un numero a otro
$ret 1;
for($i 0$i $c$i++){
$ret $ret*$n;
}
return $ret;
}

function 
raiz_q($n){ // raiz cuadrada, (por SnakeDrak)
return elevar($n,0.5);
}

function 
raiz_q2($n,$c){ // raices cubicas (por SnakeDrak)
      
return elevar($n,1/$c);
}

?>


Muchas gracias, porfin puedo finalizar las otras funciones que necesitaba este recurso :P
Actualizo el primer post.

Erik#

No funciona con decimales mi función elevar :S

SnakeDrak

#8
Hola,

Habría que hacer el algoritmo y ya, porque elevar a un decimal es igual que elevar a una fracción y elevar a una fracción es igual a una raíz xDDD así que habría que hacer el algoritmo (no encontré ninguno hecho en google), que de el resultado de la raíz, el algoritmo está en Wikipedia (ese que se da en la ESO) y ya desde eso podrías hacerlo, pero vamos que es mucho mejor que uses POW obviamente ya que tus funciones consumen más que las librerías de PHP que irán en ASM supongo.

Si te haces el algoritmo ponlo por aquí que vendría bien.

Por cierto recuerda poner (float) a las variables que tendrán decimales, también puedes usar double, ejemplo:

Código (php) [Seleccionar]

return (float)$var;

$var = (float) (5*(1/2));

// etc..


Saludos!

Erik#

Bueno, tenedremos que usar en las funciones de raiz cuadrada un sistema pre-fabricado como es pow, a mi aun no me han explicado nada sobre algoritmos, ahora empezare 3º ESO.
Espero que me empiecen a explicar algebra avanzada y algoritmos y logaritmos de cifrado y creación de ordenes matematicas :P