程序库: 数学工具 - 页 4 123456 新评论 amrali 2023.02.22 12:05 #31 fxsaber #: 你需要学习如何进行正确的性能测量。 您得出了错误的结论。 不幸的是,你并不了解自己在测量什么。 那么,请告诉我我不明白什么 :-) amrali 2023.02.22 12:16 #32 直到现在,我才明白,我应该用你的优化(!)函数替换代码,然后给用户一个大大的警告,让他们在使用这个库之前禁用编译器优化,这样才能获得不使用这些狗屎也能获得的性能! fxsaber 2023.02.22 12:26 #33 amrali #: 到目前为止,我的理解是,我应该用您的优化(!)函数替换代码,然后给用户一个大大的警告,让他们在使用该库之前禁用编译器优化,以便获得与不使用这些狗屎一样的性能! 如果你确实想知道如何正确测量函数的性能,可以去俄语论坛询问。开发人员会用实例详细说明。我没有任何链接。 amrali 2023.02.22 12:35 #34 谢谢 amrali 2023.03.01 00:35 #35 2023 年 3 月 1 日更新 已添加双倍比较函数: //+------------------------------------------------------------------+ //| 获取小数点后一致的小数位数 //| GetEqualDigits(3.124, 3.122) => 2 | //两个数字的点。 //+------------------------------------------------------------------+ int GetEqualDigits(const double a, const double b); //+------------------------------------------------------------------+ //| 获取两个数字相同的有效位数。 //| 例如,GetEqualSignificantDigits(3.124, 3.122) => 3 | | //+------------------------------------------------------------------+ int GetEqualSignificantDigits(const double a, const double b); 已添加杂项函数: //+------------------------------------------------------------------+ //| 获取有效位数。有效位数或数字 //| 是整数位和小数位的总和(| 的左右两边)。 //| 小数点),不包括前面和后面的零。 //| 例如,数字 1.23 有 2 位小数和 3 个小数位。 //| 提示:将数字改为科学记数法。这样更容易看清。| //+------------------------------------------------------------------+ int GetSignificantDigits(double value); //+------------------------------------------------------------------+ //| 返回一个数字的科学记数法指数。 //| 在科学记数法中,一个数字被转换成十进制数。 //| 在 1.0 和 10 之间,乘以 10 的某个幂。 // | 计算小数点移位,只保留一个非零点。 //| 小数点前的数字。| //+------------------------------------------------------------------+ int GetExponent10(const double value)l //+------------------------------------------------------------------+ //| 将数值的符号计算为 1、0、-1 || //+------------------------------------------------------------------+ double MathSign(const double value); 添加了将双倍值格式化为字符串的函数: //+------------------------------------------------------------------+ //| 用科学计数法将数值转换成字符串 //| 小数点前加一位数(如 6.22e-23)。 //| 数字 :可选项。小数点后的位数。| //| 默认为表示数值所需的位数。 //+------------------------------------------------------------------+ string DoubleToExponential(const double value, int digits = -1); amrali 2023.03.08 15:32 #36 2023 年 3 月 8 日更新 添加了新的杂项函数。 //+------------------------------------------------------------------+ //| 返回 pow(10,(int)power),使用快速查找表查找幂。 //| https://github.com/php/php-src/blob/master/ext/standard/math | //+------------------------------------------------------------------+ double GetPower10(const int power); 该函数的性能比MathPow(10, power) 快得多。 amrali 2023.03.08 15:36 #37 fxsaber #:更快。 @fxsaber 谢谢! 关于交易、自动交易系统和测试交易策略的论坛 库:数学工具 amrali, 2023.03.08 15:32 2023 年 3 月 8 日更新 新增杂项函数。 //+------------------------------------------------------------------+ //| 返回 pow(10,(int)power),使用快速查找表查找幂。 //+------------------------------------------------------------------+ double GetPower10(const int power); 该函数的性能比MathPow(10, power) 快得多。 amrali 2023.04.21 17:33 #38 添加了更快的四舍五入功能。 //+------------------------------------------------------------------+ //| 使用算术运算符快速求顶、求底和求圆。 //+------------------------------------------------------------------+ inline long Ceil (const double v); inline long Floor(const double v); inline long Round(const double v); inline long Trunc(const double v); 与内置的 MathCeil、MathFloor 和 MathRound 相比,速度优势约为 160-240%。 amrali 2023.04.24 07:46 #39 2023 年 4 月 24 日更新 添加了新函数: //+------------------------------------------------------------------+ //| 在最小值(包含)和最大值(不包含)之间换行。 //+------------------------------------------------------------------+ template<typename T> T Wrap(const T value, const T min, const T max); 将四舍五入函数重命名为Ceil()、Floor()、Round() 和Trunc(),以避免与 <Math\Stat\Math.mqh> 名称冲突。 修正了GetDigits() 函数,以避免在极少数情况下出现无限循环。 Ohene Kofi Akuoku Osei 2023.04.25 13:38 #40 这是三个方便的函数,用于浮点数的比较、四舍五入和货币格式化: `bool DoubleEquals(double x, double y, double eps)` 用给定的epsilon值`eps`比较两个双数值`x`和`y`,并返回一个布尔值,表示它们是否在给定的公差范围内相等。 2. `double RoundTo(double value, int digits)` 将一个 double 值 `value` 四舍五入到给定的小数位数 `digits`。 3.`string FormatMoney(double amount)` 将双数值 `amount` 格式化为表示货币金额的字符串。它将金额格式化为两位小数,用逗号替换小数点,并每隔三位数字插入空格以提高可读性。它还会在末尾添加从 `AccountInfoString(ACCOUNT_CURRENCY)` 中获得的货币符号。 DoubleEquals(double x, double y, double eps) - 该函数比较两个双数值 x 和 y,公差为 eps。如果 x 在 y 的 eps 范围内,则返回 true。该函数适用于比较由于舍入误差而可能不完全相等的浮点数。 bool DoubleEquals(double x, double y, double eps) { return fabs(x - y) < eps; } RoundTo(double value, int digits) - 该函数将双数值舍入到指定的小数位数。它使用 MathRound() 函数执行四舍五入。 double RoundTo(double value, int digits) { double factor = pow(10, digits); return MathRound(value * factor) / factor; } FormatMoney(double amount) - 该函数将双数值金额格式化为带有货币符号、千位分隔符逗号和两位小数的字符串。它有助于以用户友好的方式显示货币值。 string FormatMoney(double amount) { string currency = AccountInfoString(ACCOUNT_CURRENCY); string formatted = StringFormat("%.2f", amount); formatted = StringReplace(formatted, ".", ","); int len = StringLen(formatted); for (int i = len - 6; i > 0; i -= 3) { formatted = StringSubstr(formatted, 0, i) + " " + StringSubstr(formatted, i); } return formatted + " " + currency; } 帖子格式由版主确定 Libraries: Math Utils 在 MQL5 中创建每日回撤限制器 EA 研究PrintFormat()并应用现成的示例 123456 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
fxsaber #:
你需要学习如何进行正确的性能测量。
您得出了错误的结论。
不幸的是,你并不了解自己在测量什么。
那么,请告诉我我不明白什么 :-)
到目前为止,我的理解是,我应该用您的优化(!)函数替换代码,然后给用户一个大大的警告,让他们在使用该库之前禁用编译器优化,以便获得与不使用这些狗屎一样的性能!
如果你确实想知道如何正确测量函数的性能,可以去俄语论坛询问。开发人员会用实例详细说明。我没有任何链接。
2023 年 3 月 1 日更新
已添加双倍比较函数:
已添加杂项函数:
添加了将双倍值格式化为字符串的函数:
添加了新的杂项函数。
该函数的性能比MathPow(10, power) 快得多。
更快。
@fxsaber 谢谢!
关于交易、自动交易系统和测试交易策略的论坛
库:数学工具
amrali, 2023.03.08 15:32
新增杂项函数。
该函数的性能比MathPow(10, power) 快得多。
添加了更快的四舍五入功能。
2023 年 4 月 24 日更新
添加了新函数:
将四舍五入函数重命名为Ceil()、Floor()、Round() 和Trunc(),以避免与 <Math\Stat\Math.mqh> 名称冲突。
修正了GetDigits() 函数,以避免在极少数情况下出现无限循环。
3.`string FormatMoney(double amount)` 将双数值 `amount` 格式化为表示货币金额的字符串。它将金额格式化为两位小数,用逗号替换小数点,并每隔三位数字插入空格以提高可读性。它还会在末尾添加从 `AccountInfoString(ACCOUNT_CURRENCY)` 中获得的货币符号。
帖子格式由版主确定