forked from rosh/MQL5Book
43 lines
1.6 KiB
MQL5
43 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
| |
}
| |
//+------------------------------------------------------------------+
|