Autor
|
Tema: If vs Matemáticas ¿qué es mejor? (Leído 2,819 veces)
|
Tachikomaia
Conectado
Mensajes: 1.390
Hackentifiko!
|
Por ejemplo tengo: if ( MaxLongitud>1 ) { set ("N"+(MaxLongitud+1), eval("N"+MaxLongitud)*10-1); } else { set ("N"+(MaxLongitud+1), 9); }
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
|
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' 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... 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
Mensajes: 1.390
Hackentifiko!
|
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.htmlDigamos 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: 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
Mensajes: 31
|
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: 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. Entonces, en cada término del sumatorio, tenemos P(2,2): P(2,3)=P(2,2)+P(2,2)+P(2,2) Ahora, aplicamos la definición nuevamente para P(2,2): Lo que resulta en: 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): Que da como resultado: 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): Entonces, sumamos 1, 8 veces: 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: 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.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda de matematicas!!!
« 1 2 »
Foro Libre
|
Angel Zero
|
18
|
9,766
|
30 Julio 2010, 19:40 pm
por Angel Zero
|
|
|
ecuaciones matematicas en c/c++
« 1 2 »
Programación C/C++
|
netco0m
|
15
|
10,810
|
29 Agosto 2012, 23:34 pm
por netco0m
|
|
|
Duda de matematicas
Dudas Generales
|
m@o_614
|
3
|
2,462
|
1 Diciembre 2013, 18:34 pm
por Stakewinner00
|
|
|
ayuda con matematicas
Dudas Generales
|
MRx86
|
3
|
2,558
|
1 Diciembre 2016, 15:23 pm
por MCKSys Argentina
|
|
|
Develar un hash sha 256 o 512 con matematicas vorticiales
Hacking
|
Kerstui
|
4
|
5,186
|
15 Mayo 2024, 01:09 am
por Serapis
|
|