函数ceil()、round()、floor()的执行速度 - 页 5 12345678 新评论 pavlick_ 2017.08.25 17:58 #41 Nikolai Semko: 当然,你是对的。但我还是要说。对于99.9%的任务来说,用替代的更快的变体来取代四舍五入函数是绝对正确的,它使用小数类型转换为(int)或(long)。一个有经验的程序员只是应该意识到这个事实,并在合适的时候应用它。在99%的情况下,根本不需要麻烦四舍五入。对于价格比较,我有这样的胡说八道。// 0 - first is greater than second // 1 - equal // 2 - second is greater than first uchar compare_prices(double first, double second) { if(first - second >= _Point) return 0; if(second - first >= _Point) return 2; first = round(first/_Point); second = round(second/_Point); if(first > second) return 0; if(first < second) return 2; return 1; }你可能会注意到,在大多数情况下,它根本就不会到round(),尽管我没有测量过速度。 Andrey Kisselyov 2017.08.25 17:59 #42 Nikolai Semko: 见上文当x=3(任何整数)时,就会出现卡壳现象:)) 是我的还是你的配方有接头? 恭敬地说。 Nikolai Semko 2017.08.25 18:04 #43 Andrey Kisselyov: 是我的配方有问题还是你的配方有问题? 恭敬地说。在我的老房子里。y=ceil(x); -> y=(int)(x+1);并在你的。y=ceil(x); -> y=(int)(x)+1;当x=3时,在这两种情况下都会出现4的错误值和变体。y=ceil(x); -> y=(int)(x+0.9999999999999997);是迄今为止最正确的,同时保持最大的执行速度。 Andrey Kisselyov 2017.08.25 18:06 #44 Nikolai Semko: 在我的老房子里。并在你的。在x=3的情况下,都会有一个错误的值4。并在有变数的情况下。是迄今为止最正确的,同时保持最大的执行速度。但是当你给一个整数的输入时,为什么需要这个公式? 与尊重。 P.S. 你需要明白,如果你想成为一个好的程序员,不是在任何地方,也不是总是需要塞进各种加速函数,这取决于你手头的任务和你正在处理的算法。 Nikolai Semko 2017.08.25 18:10 #45 Andrey Kisselyov:但是,当你给一个整数的输入时,为什么你需要这个公式? 真诚的。你可能不知道它是一个整数还是一个非整数。有的时候,一个双数可以变成一个整数。 Nikolai Semko 2017.08.25 18:14 #46 Andrey Kisselyov:P.S.如果你想成为一个好的程序员,你必须明白,不是在任何地方,也不是总是需要塞进各种各样的加速函数,这取决于你手头的任务和你正在使用的算法。 当然了。这就是为什么我写了"在适当时候应用"。 Andrey Kisselyov 2017.08.25 18:14 #47 Nikolai Semko: 你可能不知道它是一个整数还是一个非整数。有的时候,一个数字可以变成一个整数。 然后直接去找你的输入数字的变体。if(x-(int)(x)>0)y=(int)(x)+1; else y=x;恭敬地说。 P.S. 根据定义,双倍数不能是整数,数字在机器内存中的表示不会改变。 Nikolai Semko 2017.08.25 18:17 #48 Andrey Kisselyov: 那么你就必须在输入的数字选择上大做文章。恭敬不如从命。这就是原因,所以我们不必大惊小怪。if(x-(int)(x)>0)y=(int)(x)+1; else y=x;写起来比较容易。y=(int)(x+0.9999999999999997);或者这样。#define _ceil(x) (int)((x)+0.9999999999999997) ... y=_ceil(x); Andrey Kisselyov 2017.08.25 18:20 #49 Nikolai Semko: 所以你不必大惊小怪。它更容易写。 于 1-0.9999999999999998你不会得到它的权利。 通过这种方法,你可以找到一个数字,在这个数字上你的公式将不起作用。 恭敬地说。 Nikolai Semko 2017.08.25 18:23 #50 Andrey Kisselyov: 于 这是不可能的。 用这种方法,你会发现一个数字,在这个数字上你的公式就不起作用了。 恭敬地说。我已经在这里 写过了。 我建议你重读一下这个主题,这样你就不会重复自己。 12345678 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
当然,你是对的。但我还是要说。对于99.9%的任务来说,用替代的更快的变体来取代四舍五入函数是绝对正确的,它使用小数类型转换为(int)或(long)。一个有经验的程序员只是应该意识到这个事实,并在合适的时候应用它。
在99%的情况下,根本不需要麻烦四舍五入。对于价格比较,我有这样的胡说八道。
你可能会注意到,在大多数情况下,它根本就不会到round(),尽管我没有测量过速度。
见上文
当x=3(任何整数)时,就会出现卡壳现象:))
恭敬地说。
是我的配方有问题还是你的配方有问题?
恭敬地说。
在我的老房子里。
并在你的。
当x=3时,在这两种情况下都会出现4的错误值
和变体。
是迄今为止最正确的,同时保持最大的执行速度。
在我的老房子里。
并在你的。
在x=3的情况下,都会有一个错误的值4。
并在有变数的情况下。
是迄今为止最正确的,同时保持最大的执行速度。
但是当你给一个整数的输入时,为什么需要这个公式?
P.S. 你需要明白,如果你想成为一个好的程序员,不是在任何地方,也不是总是需要塞进各种加速函数,这取决于你手头的任务和你正在处理的算法。与尊重。
但是,当你给一个整数的输入时,为什么你需要这个公式?
真诚的。
你可能不知道它是一个整数还是一个非整数。有的时候,一个双数可以变成一个整数。
P.S.如果你想成为一个好的程序员,你必须明白,不是在任何地方,也不是总是需要塞进各种各样的加速函数,这取决于你手头的任务和你正在使用的算法。
你可能不知道它是一个整数还是一个非整数。有的时候,一个数字可以变成一个整数。
恭敬地说。
P.S. 根据定义,双倍数不能是整数,数字在机器内存中的表示不会改变。那么你就必须在输入的数字选择上大做文章。
恭敬不如从命。
这就是原因,所以我们不必大惊小怪。
写起来比较容易。
或者这样。
所以你不必大惊小怪。
它更容易写。
1-0.9999999999999998
你不会得到它的权利。
通过这种方法,你可以找到一个数字,在这个数字上你的公式将不起作用。
恭敬地说。
于
这是不可能的。
用这种方法,你会发现一个数字,在这个数字上你的公式就不起作用了。
恭敬地说。
我已经在这里 写过了。
我建议你重读一下这个主题,这样你就不会重复自己。