long gcd(long m, long n)
{
if (m<0) m=-m;
if (n<0) n=-n;
if (m==0) return n;
if (n==0) return m;
int d = 0;
while ((m & 1)==0 && (n & 1)==0) { m >>= 1; n >>= 1; ++d; }
while ((m & 1)==0) m >>= 1;
while ((n & 1)==0) n >>= 1;
while (m!=n) // while (true) // старый вариант if (m < n)
{
n -= m;
do n >>= 1; while ((n & 1)==0);
}
else// if (n < m) это теперь без надобности
{
m -= n;
do m >>= 1; while ((m & 1)==0);
}
// else break; // старый вариантreturn (m <<= d);
}
你要用一个(不一定是2的倍数)除以另一个(不一定是2的倍数)的位移吗?
好吧,我把我得到的东西扔进去,然后你可以自己决定是否需要它。
gcd(2n + 1, 2(n + k) + 1) = gcd(2(n + k) + 1, 2n + 1) = gcd(2n + 1, k)
--
STL创建者Alexander Stepanov在Yandex的两次讲座
// 关于计算NOD的问题--第二讲。但我建议去看看/听听他们两个人的意见。很酷的讲座,聪明的人,只是令人愉快。是的,而且很有用。如果有位子转移,就去做吧。如果用模除法,不要。
除以连续的偏移量
文章结尾处的有趣数字。
这个算法在最坏的情况下将在(n-1)!迭代中执行,其中n是被除数的位深度。总之,与顺序加法算法相比,该算法对8位数产生的增益高达9倍,对16位数的增益高达546倍。
因此,这是我得到的东西。
它似乎工作得很好。请测试所有的孔。
//对它进行了调整,这样更漂亮。这很奇怪,它不是非常快。
2011.04.03 22:56:59 gcdSpeedTest (EURUSD,M20) 公共时间 GreatestCommonDivisor(random(),random())= 7656ms; // 10000000次调用
2011.04.03 22:56:51 gcdSpeedTest (EURUSD,M20) 普通时间gcd(随机(),随机())= 5234ms; // 10000000次调用
这很奇怪,它没有那么快。
2011.04.03 22:56:59 gcdSpeedTest (EURUSD,M20) 公共时间 GreatestCommonDivisor(random(),random())= 7656ms; // 10000000次调用
2011.04.03 22:56:51 gcdSpeedTest (EURUSD,M20) 普通时间gcd(随机(),随机())= 5234ms; // 10000000次调用
我有一个更大的区别。你的速度是3-4倍,但别忘了,在C++中,差异会减少2-2.5倍,所以说实话,你的速度是1.5倍。
我有一个更大的区别。你的速度是3-4倍。
但别忘了,在C++中,差异会减少2-2.5倍,所以 你老老实实地领先1.5倍。
我们会看到。
到目前为止,我们在mql5中有一个初步的版本。友好测试,寻找bug。
我已经把它作为一个结构。
我将所有操作分为两种形式--有规范化和无规范化。我已经获得了一个灵活的结构。
如果你怀疑有溢出的可能--你使用有规范化的版本,不用担心--你会节省时间(规范化可以在以后进行,当泡沫积累到一定程度时)。
档案中有一个简单的测试,但最好能更努力地测试。
谢谢你至少承认--你删除了表情符号,但谁会删除整个帖子呢?
关于这一点,学术界。 我认为你有一个所谓的 "计算器 "是很好的,但我想弄清楚你是否可以在交易过程中自动优化它?
特别是为了这个主题,我发布了最新的MT5测试器结果(任何人都可以在下次更新后重复测试)。
这就是MetaTrader 5测试器能做的,更有完整的基础设施布局(报告、图表、结果、可视化)。
特别是为了这个主题,我发布了MT5测试器的最新结果(任何人都可以在下次更新后重复测试)。
这就是MetaTrader 5测试器能做的,甚至有完整的布局(报告、图表、结果、可视化)。
7个符号,所有的ticks,自2000年以来,两个参数( variants 200 * 200 )- 40000次,每个符号每天有一百个订单。
这需要多长时间?
用10年时间 - 356 * 10 * 100 * 7 = 25 000 000笔交易
我们每分钟大约需要10次点击
和10年--365*10*1440*10=52 000 000次,一个符号。如果我们说实话,他们在每个符号上都在打钩。 所以,我们应该诚实地再乘以7。而且它不是每分钟10次。而有时是300。
这需要多长时间?