Bueno, os dejo un tipo de libreria de matematicas con diversas funciones utiles, raiz cuadrada y raiz cubica dadas por SnakeDrak :P (Thx)
<?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);
}
?>
http://www.php.net/manual/en/book.math.php
sqrt()
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();
como ejercicio de programación y lógica es factible, pero realmente es útil para PHP?
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
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:
function raiz_q($n){
return elevar($n,0.5);
}
La podrías adaptar para raízes cúbicas y tal:
function raiz_q($n,$c){ // $n raíz a calcular, $c tipo (cuadrada sería 2)
return elevar($n,1/$c);
}
Saludos!
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:
function raiz_q($n){
return elevar($n,0.5);
}
La podrías adaptar para raízes cúbicas y tal:
function raiz_q($n,$c){ // $n raíz a calcular, $c tipo (cuadrada sería 2)
return elevar($n,1/$c);
}
Saludos!
Resultado total:
<?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.
No funciona con decimales mi función elevar :S
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:
return (float)$var;
$var = (float) (5*(1/2));
// etc..
Saludos!
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
Hola,
Pero el algoritmo de la raíz es el cálculo de la raíz, es decir, las operaciones que se deben seguir para averiguar el valor de una raíz cuadrada, se da creo que en 3 de ESO o 2 pero como hay calculadoras pues nunca se usa.
Por cierto no entendiste bien lo de la raíz:
function raiz_q($n){ // raiz cuadrada, (por SnakeDrak)
return pow($n,0.5);
}
function raiz_q2($n,$c){ // raices cubicas (por SnakeDrak)
return pow($n,1/$c);
}
La primera es 0.5 (1/2) pero la segunda sirve para todos, es decir:
raiz_q2(27,3); // Devuelve raíz cúbica de 27
raiz_q2(9,2); // Devuelve raíz cuadrada de 9
1/2 es cuadrada, 1/3 es cúbica.. etc xD, por eso, o pon solo una o haz algo así:
// Por defecto raices cuadradas
function raiz_q($n,$c=2){ // raices ej: raiz_q(9) == 3, raiz_q(27,3) == 3
return pow($n,1/$c);
}
Para que entiendas:
RAÍZ n { N } == N^(1/n)
Es decir, la raíz cuadrada (2) de 9:
RAÍZ 2 { 9 } == 9^(1/2) == 3
La raíz cúbica (3) de 27:
RAÍZ 3 { 27 } == 27^(1/3) == 3
Saludos!
Gracias, ahora me quedo más claro :P
Hola,
Entonces usa solo está función:
// Por defecto raices cuadradas
function raiz_q($n,$c=2){ // raices ej: raiz_q(9) == 3, raiz_q(27,3) == 3
return pow($n,1/$c);
}
Así no hace falta dos, si quieres raíz cuadrada pues:
raiz_q(9); // Devuelve raíz cuadrada de 9
raiz_q(27,3); // Devuelve raíz cúbica de 9
Así con una función tienes para cualquier tipo de raíz.
Saludos!
Cita de: EriK#
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();
function raiz_q($n,$c=2){ // raices
return pow($n,1/$c);
}
¿dónde está definida pow?
Cita de: 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
Na na na, nene, si la función standar de PHP llega a fallar, estamos bastante en el horno, colapsa la internet :P, por motivos de aprendizaje está bien, nada más, otra cosa, las funciones que trae PHP son probadas (y sobre todo las matemáticas) y mucho más rápidas.
Cita de: Anibal784 en 25 Julio 2009, 20:00 PM
Cita de: EriK#
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();
function raiz_q($n,$c=2){ // raices
return pow($n,1/$c);
}
¿dónde está definida pow?
Cita de: 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
Na na na, nene, si la función standar de PHP llega a fallar, estamos bastante en el horno, colapsa la internet :P, por motivos de aprendizaje está bien, nada más, otra cosa, las funciones que trae PHP son probadas (y sobre todo las matemáticas) y mucho más rápidas.
Más que nada es por practica, y además las funciones como mcd, mcm... son utiles :)
Hola,
Annibal solo está practicando sus matemáticas pero no creo que vaya a hacer el algoritmo del cálculo de la raíz en PHP, por eso usa pow para la raíz para que al menos tenga claro que 4^(1/2) == Raíz cuadrada de 4 xD.
Obviamente las de php consumen mucho menos pero por ejemplo en las olimpiadas de informática joven algunas veces te piden algoritmos así que tienes que crear tú sin usar la función que ya existe.
Si eso luego haré el algoritmo para calcular la raíz sin necesidad de pow.
Saludos!