函数ceil()、round()、floor()的执行速度 - 页 3 12345678 新评论 A100 2017.08.25 15:05 #21 Nikolai Semko:是的,但如果。那么就可以了。 还有待观察的是,对于任何数量的x来说都是可以的 Nikolai Semko 2017.08.25 15:18 #22 A100:void OnStart() { Print( (int)(3.0001 + 0.999999999999999)); //все равно 4 Print( floor(3.00001)); //3 } 我不明白。有什么问题呢? Nikolai Semko 2017.08.25 15:36 #23 A100: 是否对任何数字X都可以,还有待观察。当然,它不会...毕竟,如果发生这种情况。double x=3; x=x+0.1; x=x+0.1; x=x+0.1; x=x+0.1; if (x!=3.4) Print("oppps..."); // oppps...那么,这些问题既不是针对我,也不是针对这个想法。 A100 2017.08.25 15:36 #24 Nikolai Semko: 有什么问题呢?void OnStart() { double d = 16 + 0.999999999999999; Print( (int)(d + 0.999999999999999)); //18 Print( (int)ceil( d )); //17 } Nikolai Semko 2017.08.25 15:41 #25 A100: 见我以前的帖子 A100 2017.08.25 15:47 #26 Nikolai Semko: 那么,这些问题既不是针对我,也不是针对这个想法。 floor()、ceil()、round()是为了避免问题的出现。 Nikolai Semko 2017.08.25 15:49 #27 我认为上述所有这些故障都超出了这个加速正整数四舍五入的解决方案的实际使用范围,因为很少有人需要16位数级别的精度。而这些错误来自于编译器本身的各种点级的溢出。 Nikolai Semko 2017.08.25 16:08 #28 A100: Floor(), ceil(), round()就是为了这个目的而存在的--所以没有问题。我并不禁止你使用它们。欢迎你使用它们。我将自己使用它们。但是,如果我创建一个速度很重要的算法,我将使用这种四舍五入的变体,并考虑到这种方法的所有细微差别。我认为对其他程序员来说,知道这个替代方案的存在会很有用。这场讨论正是我们需要了解的这种四舍五入方法的细微差别。非常感谢你们所有人。我说得不对吗? Alexey Navoykov 2017.08.25 16:19 #29 Nikolai Semko:DBL_MIN 和DBL_EPSILON不起作用 - 太小 了。也许留下0.9999999999999999(16个9--双数中小数点后的最大数字)是有意义的。所以,DBL_EPSILON是16位小数:2.2204460492503131e-016。在你的情况下,你实际上得到了一个,因为差异只有1e-16,比epsilon少2倍。 Nikolai Semko 2017.08.25 16:51 #30 Alexey Navoykov:所以DBL_EPSILON是16位小数:2.2204460492503131e-016而在你的情况下,你实际上得到了一个,因为差异只有1e-16,这比epsilon少2倍。是的,我明白,但这并不可行。结果发现它对16个9也不起作用(奇怪,以前似乎还能用)。它只适用于15个九点。double x=3; int Y=(int)ceil(x); Print(Y); // 3 Y=(int)(x+0.999999999999999); Print(Y); // 3 (15 9-ток) Y=(int)(x+0.9999999999999999); Print(Y); // 4 (16 9-ток) Y=(int)(x+1-DBL_EPSILON); Print(Y); // 4 12345678 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
是的,但如果。
那么就可以了。
A100:
我不明白。有什么问题呢?
是否对任何数字X都可以,还有待观察。
当然,它不会...
毕竟,如果发生这种情况。
那么,这些问题既不是针对我,也不是针对这个想法。
有什么问题呢?
见我以前的帖子
那么,这些问题既不是针对我,也不是针对这个想法。
我认为上述所有这些故障都超出了这个加速正整数四舍五入的解决方案的实际使用范围,因为很少有人需要16位数级别的精度。而这些错误来自于编译器本身的各种点级的溢出。
Floor(), ceil(), round()就是为了这个目的而存在的--所以没有问题。
我并不禁止你使用它们。欢迎你使用它们。我将自己使用它们。但是,如果我创建一个速度很重要的算法,我将使用这种四舍五入的变体,并考虑到这种方法的所有细微差别。我认为对其他程序员来说,知道这个替代方案的存在会很有用。这场讨论正是我们需要了解的这种四舍五入方法的细微差别。非常感谢你们所有人。我说得不对吗?
DBL_MIN 和DBL_EPSILON不起作用 - 太小 了。也许留下0.9999999999999999(16个9--双数中小数点后的最大数字)是有意义的。
所以,DBL_EPSILON是16位小数:2.2204460492503131e-016。
在你的情况下,你实际上得到了一个,因为差异只有1e-16,比epsilon少2倍。
所以DBL_EPSILON是16位小数:2.2204460492503131e-016
而在你的情况下,你实际上得到了一个,因为差异只有1e-16,这比epsilon少2倍。
是的,我明白,但这并不可行。结果发现它对16个9也不起作用(奇怪,以前似乎还能用)。它只适用于15个九点。