2021 年 5 月 19 日更新
添加了调试功能
// 将数值转换为精确的十进制文本字符串。 string DoubleToStringExact(double value); // 将数值转换为原始十六进制文本字符串。 string DoubleToHexadecimal(double value);
2021 年 5 月 21 日更新
添加了其他功能
// 将范围 [min, max] 中的 x 转换为另一范围 [new_min, new_max] 中的 y。 // 可用来调整指标值或图形对象的大小。 double map_range(double x, double min, double max, double new_min, double new_max); // 获取小数点后的位数。 int GetDigits(double number);
2021 年 5 月 27 日更新
已添加调试功能
// 返回以ε(ulps)表示的两个浮点数之间的差值。 long UlpDiff(const double num1, const double num2); // 返回 x 之后的下一个可表示值 double nextafter(double num);
已添加杂项函数
bool IsRound(const double number, const int digits); bool IsRoundToStep(const double number, const double step);
已添加以 C# 编写的"dotnet_cross_check.mq5"脚本和 "RoundSharp.dll"。
2021 年 5 月 30 日更新
已添加杂项函数
//获取小数点左边的整数位数。 int IntegerDigits(double number); //将比例尺 [min, max] 上的 x 映射到归一化比例尺 [0, 1]。 double normalize(double x, double min, double max);
二进制表示双倍值的便捷函数
//Returns the double value corresponding to a bit representation. double LongBitsToDouble(long bits); //Returns the bit representation corresponding to a double value . long DoubleToLongBits(double value); //Returns the unbiased exponent used in the bit representation. int GetExponent(double value); //Returns the mantissa used in the bit representation. long GetMantissa(double value); //Returns the size of an ulp of the argument. double Ulp(double value);
二进制字符串表示法的便捷函数
// 将数值转换成最短的字符串表示法 // 循环成相同的数值。 string Repr(double value);
2021 年 6 月 1 日更新
新增功能:
// 返回指数在比特表示中的原始编码。 int RawExponent(double value); // 返回比特表示中有效数字的原始编码。 long RawSignificand(double value); // 返回双数值的无偏(调整)指数。 int Exponent(double value); // 返回双数值的有效数字。 double Significand(double value); // 确定数字是否可以精确地用 double 表示。 bool IsExactDouble(double value); // 用千位分隔符格式化数字。 string FormatNumber(const double number,const string separator=",");
2021 年 6 月 17 日更新
添加了新功能:
// 判断传递的值是否为整数。 bool IsInteger(double num); // 获取小数部分(总是正数) double GetFraction(double num); // 剪切(限制)一个数字的边界(范围) template<typename T> T Clip(T value, T low, T high); // 在 mql 中,除数为零的错误会迫使 mql 程序停止运行。 double safeDiv(double x, double y); // 将数值转换为十六进制浮点常量字符串。 string DoubleToHexFloatConstant(double value);
2021 年 6 月 20 日更新
添加了新功能:
// 将浮点数提前指定的 ULP 个数。 double DoubleAdvance(double value, long distance);
2021 年 6 月 21 日更新
添加了新的类函数宏:
// 使用往返("%.17g")格式指定符打印双倍数。 #define PRINT_R(A) Print(#A + " = ", Repr(A))
您在 mt4 中测试过吗?(我指的是包含文件)
2023 年 1 月 27 日更新
重新命名了四舍五入函数,使其更一致:
double MathRound(const double value, const int digits); double MathRound(const double value, const double step); double MathFloor(const double value, const int digits); double MathFloor(const double value, const double step); double MathCeil(const double value, const int digits); double MathCeil(const double value, const double step); double MathTrunc(const double value, const int digits); double MathTrunc(const double value, const double step);
添加了两个用于比较双倍值的新函数:
//+------------------------------------------------------------------+ //| 检查是否几乎相等(忽略微小的 Rounoff 错误) | //| 检查是否几乎相等(忽略微小的 Rounoff 错误) | // //| 如果两个双数的二进制表示相差超过 | //| 一个最小有效位 (ulp),函数返回 false。 //+------------------------------------------------------------------+ bool AlmostEqual(const double a, const double b); //+------------------------------------------------------------------+ //| 检查两个浮点数的值是否接近。 //| 其中,n:是我们丢失的有效位数。 //| 通过四舍五入误差(最大允许精度差)。 //| 在实践中,n = 2 或 3 通常是可行的。 //+------------------------------------------------------------------+ bool IsClose(const double a, const double b, const int maxDifferentSignificantDigits = 2);
数学工具:
作者: amrali