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

 

 


Tema destacado: Tutorial básico de Quickjs


+  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,819 veces)
Tachikomaia


Conectado Conectado

Mensajes: 1.390


Hackentifiko!


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


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


Hackentifiko!


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



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
Ayuda de matematicas!!! « 1 2 »
Foro Libre
Angel Zero 18 9,766 Último mensaje 30 Julio 2010, 19:40 pm
por Angel Zero
ecuaciones matematicas en c/c++ « 1 2 »
Programación C/C++
netco0m 15 10,810 Último mensaje 29 Agosto 2012, 23:34 pm
por netco0m
Duda de matematicas
Dudas Generales
m@o_614 3 2,462 Último mensaje 1 Diciembre 2013, 18:34 pm
por Stakewinner00
ayuda con matematicas
Dudas Generales
MRx86 3 2,558 Último mensaje 1 Diciembre 2016, 15:23 pm
por MCKSys Argentina
Develar un hash sha 256 o 512 con matematicas vorticiales
Hacking
Kerstui 4 5,186 Último mensaje 15 Mayo 2024, 01:09 am
por Serapis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines