Manipulating prices as values of double
type may lead to calculation mistakes caused by the way real numbers are presented in double
values as well as due to the type capacity limits.
Assume the following initialization of a variable of the double
type is executed:
In spite of exact constant definition, the real value, hold by a defined variable, looks like 100.099999999999998
, but not 100.1
.
This is because each double value is expressed as X * 2 ^ Y
, where X
is mantissa and Y
is 2-basis exponent.
As a result, each time the price field is accessed, conversion mistakes might happen.
Since recently, CME MDP uses a real number with a fixed decimal exponent. Therefore, the SDK exposes the OnixS::CME::ConflatedUDP::Decimal class for a better experience with original data, transmitted by MDP, and to avoid issues described above.
In contrast to a double
type, available as a native C++ data type, the OnixS::CME::ConflatedUDP::Decimal class presents real numbers with the 10-basis exponent. Therefore, each number looks like X * 10 ^ Y
, where X
is a mantissa and Y
is an exponent.