标准功能/方法的其他实现方式 - 页 7

 
pavlick_:

因为将双数转换为整数(这种方式)是低劣的代码。Round with friends的设计不是为了从浮动类型中获得整数类型。

那么,谁能阻止你把函数类型改为双倍。
并请控制你的言语。
 
Nikolai Semko:
那么,谁能阻止你把函数类型改为双倍。
并请控制你的言语。

没有冒犯的意思。有各种各样的rint、lrint、llrint用于转换为整数。当做长线(双线)要容易得多时,它们的出现不是为了一个理由。将浮动转换为整数是一个概念上的错误。

 
pavlick_:

没有冒犯的意思。有各种各样的rint、lrint、llrint来转换为整数。他们的出现并不是为了一个原因,当你可以做一个更容易的长(双)。将浮动转换为整数是一个概念上的错误。

哦,你只是脱离了这个圈子......
 
Nikolai Semko:
哦,你就是不合群......

好了,UB在你手中。

 
fxsaber:
那么就有了模棱两可的解释。决定输出周期时间,而不是一个函数调用 的平均时间。

收益在3到8倍之间。

也许计算时间到功能的方法并非无懈可击,但它是相当客观的。但如果有人提出更好、更公正的方法,那就更好了。

我把它改成了双倍的类型,以便进行充分的类比。

double Ceil (double x) { return double((x-(long)x>0)?(long)x+1:(long)x);}
double Round(double x) { return double((x>0)?(long)(x+0.5):(long)(x-0.5));}
double Floor(double x) { return double((x>0)?(long)x:((long)x-x>0)?(long)x-1:(long)x);} 
2018.08.25 22:16:01.309 TestRound (EURUSD,M10)  Время цикла без округления = 1.315 наносекунд, сумма = 5249993749.98145962
2018.08.25 22:16:01.309 TestRound (EURUSD,M10)  Время выполнения функции sqrt = 0.628 наносекунд, сумма = 81969849.90928555  // даже квадратный корень вычисляется в несколько раз быстрее чем штатные функции округления
2018.08.25 22:16:01.313 TestRound (EURUSD,M10)  Время выполнения функции ceil =  2.037 наносекунд, Контрольная сумма = 5250492895.0
2018.08.25 22:16:01.315 TestRound (EURUSD,M10)  Время выполнения функции Ceil =  0.587 наносекунд, Контрольная сумма = 5250492895.0
2018.08.25 22:16:01.318 TestRound (EURUSD,M10)  Время выполнения функции floor = 2.247 наносекунд, Контрольная сумма = 5249492896.0
2018.08.25 22:16:01.320 TestRound (EURUSD,M10)  Время выполнения функции Floor = 0.385 наносекунд, Контрольная сумма = 5249492896.0
2018.08.25 22:16:01.323 TestRound (EURUSD,M10)  Время выполнения функции round = 1.610 наносекунд, Контрольная сумма = 5249992896.0
2018.08.25 22:16:01.324 TestRound (EURUSD,M10)  Время выполнения функции Round = 0.181 наносекунд, Контрольная сумма = 5249992896.0

我建议开发者在常规函数中使用这种算法。

附加的文件:
TestRound.mq5  7 kb
 
)).这可能只在对数值范围有确切了解的个人工艺品中才有用武之地,但在标准图书馆中却没有。内置函数不是傻瓜写的,不要以为你是最聪明的。这里有一个朋友,他也写了未定义和未指定的行为,然后惊讶地发现它并不是这样的https://www.linux.org.ru/forum/development/14422428#comments。 而所有这些节省的几纳秒甚至在真正的算法中都不可见(不是在裸奔中)。
 

我也不明白为什么四舍五入函数要返回双倍。在我看来,这就是四舍五入的意义所在--你需要定义如何从一个浮动值得到一个整数。

什么 "概念性错误 "的转换,我也不太清楚。

 
Georgiy Merts:

我也不明白为什么四舍五入函数要返回双倍。在我看来,这就是四舍五入的意义所在--你需要定义如何从一个浮动值得到一个整数。

什么 "概念性错误 "的转换,我也不太清楚。

想一想你在整数之外得到什么。
 
fxsaber:

归一化的双数

结果是1123275和166643支持MyNormalizeDouble(优化=1)。没有优化,它的速度是四倍(在内存中)。


我一直想问你 你的代码风格中是否有很多 可以编程的地方。

如果你有一个任务,要自己设计和创建一个非常复杂的机制,是否值得使用你写代码的方式?而且你必须在每个步骤中检查每条记录的性能。

如果你以你的风格和水平来处理这个过程,一个开发人员需要多少时间来阅读/编写/验证代码?

我敢打赌,我老了以后没有写出我心中的一半东西。


zy。对不起,离题了。编程风格是一个个人问题。但到了一定程度,你开始意识到,代码应该尽可能地可读,这正是为了生产力 的目的。

Productivity - США - MetaTrader 5
Productivity - США - MetaTrader 5
  • www.metatrader5.com
Индекс производительности труда показывает изменение объема выпущенной продукции, приходящегося на одного работника. Этот показатель полезен для предсказания инфляции и прироста объема производства. Если стоимость труда увеличивается соответственно увеличению производительности, и, кроме того, маловероятно увеличение производственных издержек...
 
Реter Konow:

我一直想问你--你能用你的代码风格编程多少

我的风格的一个例子?