elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  If vs Matemáticas ¿qué es mejor?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: If vs Matemáticas ¿qué es mejor?  (Leído 2,107 veces)
Tachikomaia


Conectado Conectado

Mensajes: 1.218


Superhacker (es broma xD )


Ver Perfil
If vs Matemáticas ¿qué es mejor?
« en: 24 Diciembre 2023, 07:01 am »

Por ejemplo tengo:
Código
  1. if ( MaxLongitud>1 ) {
  2. set ("N"+(MaxLongitud+1), eval("N"+MaxLongitud)*10-1);
  3. } else {
  4. set ("N"+(MaxLongitud+1), 9);
  5. }
  6.  
Eso crea una variable cuyo valor debe ser 9, 99, 999, etc, según cuánto sea la variable MaxLongitud. Creo que se podría simplificar pero en mi lenguaje hacer potencias funciona mal parece. Pero eso no es la cuestión. La cuestión es que como no sé una fórmula matemática que en cualquier caso resulte los valores que necesito, usé un if. Yo necesitaría esto:
Si X (MaxLongitud) es 1, Y (el resultado) debe ser 9.
Si X es 2, Y debe ser 99.
etc.
Creo que es Y=10^X-1, pero como la potencia funciona mal no puedo hacer eso. Lo que hago es tomar el valor de una variable que en ese momento es +1 y luego /10, creo, o sea, cuando necesito asignar un 99, la variable anterior es 10, la cuestión es que le hago *10-1 y listo. El problema es la 1era vez. La 1era vez esa variable es 0, y si hago 0*10-1 no me da 9.

Yo supongo que hay alguna fórmula matemática que cumpla eso, y así no es necesario poner un if, y por curiosidad o manía o no sé qué quiero saber cual es la bendita fórmula, pero ¿conviene programar así usando fórmulas "complicadas" en vez de ifs, o conviene usar ifs? En este caso puse una fórmula, pero digo que sería posible poner una probablemente más compleja que sirva para ambos casos ¿pero conviene? ¿qué método enlentece menos a los programas?

Trato de evitar ifs porque con ellos la máquina debe hacer 2 cosas en vez de una, pero si la fórmula es muy larga puede que sea peor usarla.


« Última modificación: 24 Diciembre 2023, 07:04 am por Tachikomaia » En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.357


Ver Perfil
Re: If vs Matemáticas ¿qué es mejor?
« Respuesta #1 en: 28 Diciembre 2023, 17:11 pm »

Es raro eso de que "la potencia funciona mal"... un lenguaje puede tener bugs, pero nunca tan evidentes que no fueran corregidos.

En cualquier caso, una potencia es una serie de mutiplicaciones, luego ejecuta un bucle.

Potencia              Bucle
---------------------------------------
10^0 =1
10^1 = 10    
10^2 = 100   ---->10x10
10^3 = 1000 ----> 10x10x10
10^4 = 10000 ----> 10x10x10x10
...

Al final restas 1 y ya tienes todos los 9...
los caso 0 y 1 puedes tratarlos en un 'else'

Código:
if n>= 2
  ...bucles
else
  ... los caso 0 y 1 se tratan aquí.
end if

p.d.: Más aún antes del bucle puede condicionarse para los casos 0 y 1. Aunque el código en ambos casos no difiere mucho en cuanto a la ncantidad de líneas de código...

Código:
x=1
bucle para k desde 1 hasta n
    x= (x * 10)
siguiente

devolver x-1


« Última modificación: 28 Diciembre 2023, 17:16 pm por Serapis » En línea

Tachikomaia


Conectado Conectado

Mensajes: 1.218


Superhacker (es broma xD )


Ver Perfil
Re: If vs Matemáticas ¿qué es mejor?
« Respuesta #2 en: 29 Diciembre 2023, 07:26 am »

Es raro eso de que "la potencia funciona mal"... un lenguaje puede tener bugs, pero nunca tan evidentes que no fueran corregidos.
Sí, pero mira:
https://foro.elhacker.net/programacion_general/iquestel_programa_dice_que_99999991_es_999999999999999-t520613.0.html
Digamos que el mío es viejito, pero aún así es raro sí.

Este tema es sobre qué es más eficiente, así que usar bucles no parece buena idea.

Esto que me dijeron en otro asunto me ha parecido muy interesante:
Citar
Si lo que te interesa es una función f(x) tal que f(1)=3 y f(2)=6 es muy sencillo. Si estás seguro de que la relación entre la variable dependiente y la independiente es lineal, sólo tienes que hallar la ecuación de la recta sabiendo dos puntos de la misma.

f(x)=ax+b

Si f(1)=3 ⟹ 3=a⋅1+b

Si f(2)=6 ⟹ 6=a⋅2+b

Para hallar el valor de los coeficientes sólo hay que resolver el sistema:

a+b=3
2a+b=6

a=3
b=0

f(x)=3x

Si en lugar de dos puntos de datos tienes tres, se procede de igual manera, sólo que en vez de dos parámetros a y b vas a tener tres y ya no es una recta (polinomio de grado 1) sino un polinomio de grado dos.

f(x)=ax^2+bx+c

Por ejemplo tenemos tres puntos f(1)=3, f(2)=6 y f(3)=13

Si f(1)=3 entonces 3=a⋅(1^2)+b⋅(1)+c

Si f(2)=6 entonces 6=a⋅(2^2)+b⋅(2)+c

Si f(3)=13 entonces 13=a⋅(3^2)+b⋅(3)+c

Resolviendo el sistema
a+b+c=3
4a+2b+c=6
9a+3b+c=13

a=2
b=−3
c=4

f(x)=2x^2−3x+4

Para cuatro puntos de dato, tienes una cúbica con cuatro paràmetros, etc.
Si las variables son 2, probablemente las fórmulas que se requieran sean de ese tipo, a veces simplificables. Si son 3 o más no sé, estoy averiguando.
« Última modificación: 29 Diciembre 2023, 07:31 am por Tachikomaia » En línea

profinet

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Re: If vs Matemáticas ¿qué es mejor?
« Respuesta #3 en: 29 Diciembre 2023, 10:34 am »

Matemáticamente hablando, la potenciación es una suma de sumas. No hay manera de resumir esta definición en otros términos. Verás...

Dado un conjunto N+ de números naturales (sin incluir el cero) y el grupo aditivo (N+,+), definimos la potenciación como una operación P:N+×N→N+ de la siguiente manera:

Código:
    1. Para n=0, P(a,0)=1 para cualquier a en N+.
    2. Para n>0, P(a,n)=∑[k=1,n]P(a,n−1).

Esta definición refleja la idea de que P(a,n) es la suma de n términos, cada uno de los cuales es P(a,n−1).

Veamos un ejemplo con esta definición. Consideremos a=2 y n=3.
Código:
P(2,3)=∑[k=1,3]P(2,2)

Entonces, en cada término del sumatorio, tenemos P(2,2):
Código:
P(2,3)=P(2,2)+P(2,2)+P(2,2)

Ahora, aplicamos la definición nuevamente para P(2,2):
Código:
P(2,2)=∑[k=1,2]P(2,1)

Lo que resulta en:
Código:
P(2,3)=P(2,1)+P(2,1)+P(2,1)+P(2,1)+P(2,1)+P(2,1)

Finalmente, aplicamos la definición para P(2,1):
Código:
P(2,1)=∑[k=1,1]P(2,0)

Que da como resultado:
Código:
P(2,3)=P(2,0)+P(2,0)+P(2,0)+P(2,0)+P(2,0)+P(2,0)+P(2,0)+P(2,0)

Y aplicando la definición final para P(2,0):
Código:
P(2,0)=1

Entonces, sumamos 1, 8 veces:
Código:
P(2,3)=1+1+1+1+1+1+1+1=8

Por lo tanto, P(2,3) = 2^3 = 8

Ahora bien, existen algoritmos que te permiten reducir el número de operaciones que debes realizar para calcular la potencia de un número: potenciación rápida. El algoritmo de exponenciación rápida se basa en la observación de que si se tiene que calcular a^n, donde n es par, puedes dividir el problema en dos partes más pequeñas: a^(n/2) y luego elevar el resultado al cuadrado. Si n es impar, puedes hacer lo mismo pero también multiplicar por a al final.

Aquí un pseudocódigo:

Código:
funcion potenciacion_rapida(a, n):
    si n == 0:
        devolver 1
    si n es par:
        mitad = potenciacion_rapida(a, n / 2)
        devolver mitad * mitad
    si n es impar:
        mitad = potenciacion_rapida(a, (n - 1) / 2)
        devolver a * mitad * mitad
« Última modificación: 29 Diciembre 2023, 10:36 am por profinet » En línea

Don't shy away from the terminal; embrace it! In the GNU world, everything is a file.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Foro de matemáticas? « 1 2 3 4 5 »
Sugerencias y dudas sobre el Foro
-Ement- 49 13,441 Último mensaje 20 Julio 2007, 19:45 pm
por Nakp
Pregunta matemáticas « 1 2 3 »
Foro Libre
Shell Root 23 7,412 Último mensaje 16 Septiembre 2010, 22:10 pm
por Komodo
Ayuda con las matemáticas !!!
Programación General
BlackM4ster 1 2,025 Último mensaje 24 Abril 2013, 19:22 pm
por Saberuneko
Mi problema con las Matemáticas « 1 2 »
Foro Libre
Br1ant 16 5,814 Último mensaje 24 Febrero 2015, 02:28 am
por Br1ant
ayuda con matematicas
Dudas Generales
MRx86 3 2,378 Último mensaje 1 Diciembre 2016, 15:23 pm
por MCKSys Argentina
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines