44 lines
1.6 KiB
MQL5
44 lines
1.6 KiB
MQL5
|
//+------------------------------------------------------------------+
|
||
|
//| MathAbs.mq5 |
|
||
|
//| Copyright 2021, MetaQuotes Ltd. |
|
||
|
//| https://www.mql5.com |
|
||
|
//+------------------------------------------------------------------+
|
||
|
|
||
|
#define PRT(A) Print(#A, "=", (A))
|
||
|
|
||
|
//+------------------------------------------------------------------+
|
||
|
//| Script program start function |
|
||
|
//+------------------------------------------------------------------+
|
||
|
void OnStart()
|
||
|
{
|
||
|
double x = 123.45;
|
||
|
double y = -123.45;
|
||
|
int i = -1;
|
||
|
|
||
|
PRT(MathAbs(x)); // 123.45, kept "as is"
|
||
|
PRT(MathAbs(y)); // 123.45, negative sign is gone
|
||
|
PRT(MathAbs(i)); // 1, int is handled natively
|
||
|
|
||
|
int k = MathAbs(i); // no warning: ints are used both for input/result
|
||
|
|
||
|
// need to convert double to long
|
||
|
long j = MathAbs(x); // possible loss of data due to type conversion
|
||
|
|
||
|
// need to convert 4-byte int to 2-byte short
|
||
|
short c = MathAbs(i); // possible loss of data due to type conversion
|
||
|
|
||
|
// compare casting to unsigned vs taking abs
|
||
|
uint u_cast = i;
|
||
|
uint u_abs = MathAbs(i);
|
||
|
PRT(u_cast); // 4294967295, 0xFFFFFFFF
|
||
|
PRT(u_abs); // 1
|
||
|
|
||
|
// zero can be positive or negative
|
||
|
double n = 0;
|
||
|
double z = i * n;
|
||
|
PRT(z); // -0.0
|
||
|
PRT(MathAbs(z)); // 0.0
|
||
|
PRT(z == MathAbs(z)); // true
|
||
|
}
|
||
|
//+------------------------------------------------------------------+
|