- El valor absoluto de un número
- Máximo y mínimo de dos números
- Funciones de redondeo
- Resto tras la división (operación módulo)
- Potencias y raíces
- Funciones exponenciales y logarítmicas
- Funciones trigonométricas
- Funciones hiperbólicas
- Prueba de normalidad para números reales
- Generación de números aleatorios
- Control de la codificación endian de números enteros
El valor absoluto de un número
La API de MQL5 proporciona la función MathAbs, que puede eliminar el signo menos del número si existe. Por lo tanto, no es necesario codificar manualmente equivalentes más largos como éste:
if(x < 0) x = -x; |
numeric MathAbs(numeric value) ≡ numeric fabs(numeric value)
La función devuelve el valor absoluto del número que se le pasa, es decir, su módulo. El argumento puede ser un número de cualquier tipo. En otras palabras: la función está sobrecargada para char/uchar, short/ushort, int/uint, long/ulong, float y double, aunque para los tipos sin signo los valores son siempre no negativos.
Al pasar una cadena, se convertirá implícitamente en un número double, y el compilador generará una advertencia pertinente.
El tipo del valor de retorno es siempre el mismo que el tipo del argumento, por lo que el compilador puede necesitar convertir el valor al tipo de la variable receptora si los tipos son diferentes.
Encontrará ejemplos de uso de las funciones en el archivo MathAbs.mq5.
void OnStart()
|
Es importante tener en cuenta que convertir un entero con signo en un entero sin signo no equivale a tomar el módulo de un número:
uint u_cast = i;
|
Tenga en cuenta también que el número 0 puede tener signo:
...
|
Uno de los mejores ejemplos de cómo utilizar MathAbs es comprobar la igualdad de dos números reales. Como es sabido, los números reales tienen una precisión limitada para representar valores, que puede degradarse aún más en el curso de cálculos largos (por ejemplo, la suma de diez valores 0.1 no da exactamente 1.0). La condición estricta value1 == value2 puede dar false en la mayoría de los casos, cuando la igualdad puramente especulativa debería mantenerse.
Por lo tanto, para comparar valores reales, se suele utilizar la siguiente notación:
MathAbs(value1 - value2) < EPS |
donde EPS es un pequeño valor positivo que indica una precisión (véase un ejemplo en la sección operaciones de comparación).