函数ceil()、round()、floor()的执行速度 - 页 7 12345678 新评论 Nikolai Semko 2017.08.26 07:30 #61 Andrey Kisselyov:让我们举个例子。 如果你连机器的位数都改变了,你改成了64位,机器的精度也提高了,你的公式就会停止工作,因为机器的精度会比你设定的误差高很多。 恕我直言。 P.S.可能还有其他选择,你的公式会在一个数字范围内失败。不断调整错误,从切换到不同的机器,或编译器的变化,你没有被告知,或当你改变机器中的数字表示,或从削减一个小数部分 的数字时,编译一个新版本的终端...你不知道什么会发生变化,我不认为做一个IF或者苦苦猜测会发生什么,一遍又一遍地写错误是个好主意...... 我认为有很多事情需要思考。我不同意。公式(y=(int)(x+0.99999999999997);)在提高精度时不会停止工作,它的工作方式是一样的。和以前一样,错误将发生在DBL_EPSILON(当前值:0.00000000000002222204460492503131)和0.000000000003之间的数字小数部分的范围内。 即使DBL_EPSILON减少到零(当然它不可能),范围也将增加当前DBL_EPSILON的大小,即增加2.2204460492503131e-016。我相信人们甚至可以忽略这样一个错误范围。而 "机器精度 "这个词到底是什么。有标准化的准确度,如双倍和其他类型。你的推理不算数。关于P.S.我就不说了))。我怕得罪人。恕我直言。 Andrey Kisselyov 2017.08.26 18:41 #62 Nikolai Semko: 我不同意。公式(y=(int)(x+0.99999999999997);)在提高精度时不会停止工作,它的工作方式是一样的。和以前一样,错误将发生在DBL_EPSILON(当前值:0.00000000000002222204460492503131)和0.000000000003之间的数字小数部分的范围内。 即使DBL_EPSILON减少到零(当然它不可能),范围也将增加当前DBL_EPSILON的大小,即增加2.2204460492503131e-016。我相信人们甚至可以忽略这样一个错误范围。而 "机器精度 "这个词到底是什么。有标准化的准确度,如双倍和其他类型。你的推理不算数。关于P.S.我就不说了))。我怕得罪人。恭敬地说。 当应用于市场上的价格时,你一般可以把精确度留在5-6位数,由于你是在数学领域工作,不知道谁和谁会需要你的新的快速计算,你应该应用 "愚蠢行为原则",根据这个原则,谁和什么时候可以把那个值放在计算中的函数会出错,这并不重要。 尊重你自己,任何人都可以把你的脸擦得很脏,值得通过无礼的方式给对手一个理由吗? 我们都在某些方面有所发展,而其他事情对我们来说就是没有兴趣或不重要。 既然我们谈论的是汇编程序,以及你想象中编译器之后代码会发生什么,我就告诉你几个你可能理解的短语。 由于一个处理器在每个寄存器中的位数有限,在这些寄存器中进行加减或任何其他操作,在涉及到标志时有一些棘手之处。 作为一个在汇编程序中工作过的人,你应该明白我们在说什么。 那么,请告诉我在不同型号的处理器上的命令ADD是否会有溢出,如果你在不同的型号上使用相同的数字在汇编语言上写代码,一般来说,它不能适合任何寄存器,会被截断,从上一代的8位到现在的64位,以及未来如何变化(技术发展是如此短暂,刚刚过去40年,而我们已经有一个多核处理器而不是80年代初的灯)? 我的尊重。 Andrey Kisselyov 2017.08.26 19:36 #63 最好是打开剖析,看看你的代码中哪里执行得慢,显然不是数学函数。 大多数是循环,各种查询等等。数学函数是最快的,在我看来,试图在那里削减一些东西是不太明智的。 恕我直言。 Vladimir 2017.08.27 02:35 #64 Nikolai Semko:好了,先生们,你们已经表达了你们的观点。我将为你改变天花板的功能。这个变体比变体:y=(int)(x+0.99999999999997) 慢25-50%; 但它是最大限度的正确,对负整数有效,比ceil(x)快3倍。但我自己,作为一个普通人和失败者,我将使用带九的变体,因为我认为你所有的论点都很无聊,对我这个长期用汇编程序编程的人来说,因此知道编译后的代码会发生什么,这太过分了--把检查放在你可以不做的地方。 传统上,转向个人主义意味着缺乏对案情的争论。但我仍然问你一个问题。是什么让你把一百万次四舍五入的时间从8毫秒缩短到5或2毫秒? 如果连这样的延迟都变成了瓶颈,那么处理器上的真正负载是什么?我没有遇到过这样的需求。也许是一些抽象的、有学术意义的东西? Andrey Kisselyov 2017.08.27 10:47 #65 Vladimir: 传统上,个人化意味着缺乏实质性的论证。 我同意,以及缺乏文化行为,试图羞辱对话者。 恭敬地说。 Nikolai Semko 2017.08.27 17:24 #66 Andrey Kisselyov: 关于 "没有功劳",我没有对你的论点给予评价,也没有贬低你的功劳,我希望你。 尊重你自己,把你的脸揉在泥土里,可以任何人,是否给你的对手一个理由,要求他们的行动无礼? 我们都有发展的东西,而我们只是不感兴趣或与我们无关的。弗拉基米尔。 追求个性,传统上意味着缺乏对案情的论证。安德烈-基塞廖夫。我同意,以及缺乏试图羞辱对话者的文化行为。哇!如果我冒犯了任何人,我当然要道歉。你一定是被我说的话冒犯了。尼古拉-森科。好了,各位嘉宾,就这么定了。我正在为你改变天花板的功能。但我自己,作为一个平民和C类学生,将使用带九的变体,因为我认为你的所有论点都是书呆子......尼古拉-森科。而 "机器精度 "这个词到底是什么。有标准化的精确度,如双倍和其他类型。你的推理不算数。关于P.S.我就不说了))。我怕得罪人。嗯,你知道...我认为你有丰富的想象力。在普通的友好玩笑中,你会看到 "转移到人格","试图羞辱对话者","贬低优点"......。还是我错过了什么,在其他地方我超越了体面的界限?对不起,安德鲁,但我显然没有足够的知识和经验来理解你在那封P.S.中写的东西。安德烈-基塞廖夫。P.S. 可能还有其他的变体,当你的公式在某个数字范围内失效时。由于切换到另一台机器,或编译器的变化,你没有被告知,或机器对数字的表示方式的变化,或在新版本的终端编译时切割数字 的小数部分 而不断调整错误。我不知道什么可以改变,我不认为做中频或遭受猜测会发生什么的错误,一次又一次地开出错误的处方是一个好主意...... 如果有人能解释我写的东西的含义,我将非常感激。 我再次为我的语气表示歉意。我一直提倡同事之间相互尊重,行为正确。恶魔在我心中。 Nikolai Semko 2017.08.27 17:33 #67 Vladimir: 是什么促使你将一百万的四舍五入时间从8毫秒减少到5毫秒或2毫秒? 如果连这样的延迟都被证明是一个瓶颈,那么处理器的真正负担是什么?我没有遇到过这样的需求。也许是一些抽象的、具有学术意义的东西?安德烈-基塞廖夫。最好是打开剖析,看看你的代码中哪里滞后,显然不是数学函数。 主要是循环,各种查询等等。 数学函数是最快的,试图在那里削减一些东西,我认为不是很明智。 我不知道你为什么认为我很慢。相反,我认为我的算法是最快的。 我只是有点速度狂。当然,使用这样一个替代性的四舍五入函数替换所带来的收益非常小,只是百分之零点几。但正如俗话说的,从世界范围来看。例如,在飞机和火箭科学方面也是如此。在努力减轻重量而不影响强度的过程中,一切都被修改了,甚至是螺栓。也许这就是为什么与逻辑相反,如今飞机是最安全的运输方式的原因之一。 Andrey Kisselyov 2017.08.27 17:45 #68 Nikolai Semko:哇!如果我冒犯了任何人,我当然要道歉。你一定是被我说的话冒犯了。嗯,你知道...我认为你有一个生动的想象力。在一个简单的友好玩笑中,你看到了 "个人化"、"羞辱"、"轻视"......。如果你允许自己 "嘲笑 "你的朋友,你就没有朋友,你周围有你有时嘲笑的小丑,不重视他们的友谊和意见。尼古拉-森科。还是我错过了什么,在其他地方我超越了体面的界限?我不是你的朋友、兄弟,甚至是亲密的人,所以你可以给你一些评价,更何况是公开的评价。尼古拉-森科。 对不起,安德里,我只是显然没有足够的知识和经验来理解你在那个P.S.中写的东西:如果有人向我解释你写的东西的含义,我将非常感激。在P.S.中写的东西,你由于某种原因不能理解,其意义是显而易见的,你不知道你使用你的快速公式的技术将如何发展,你不知道平台将如何发展,你不知道随后将在编译器中加入什么,数字将如何在处理器寄存器空间中表示,你对此一无所知, 引入一个常数, 说它将积极地、永远地解决一切问题,可以说是妄想。 如果你考虑到你的公式会被论坛上的其他人采用,并可能把它放到C或Pascal或其他东西中,你也需要考虑到这些问题,数学在平台和编程语言上都没有限制。 尼古拉-森科。 我再次为我的语气表示歉意。我一直主张同事之间要相互尊重,行为要正确。我太过分了。接受道歉。不要再犯同样的错误,否则你的话就是毫无意义的垃圾。 恭敬地说。 Andrey Kisselyov 2017.08.27 17:47 #69 Nikolai Semko: 我不知道是什么让你觉得我很慢。相反,我认为我的算法是最快的。我只是有点速度狂。当然,使用这样一个替代性的四舍五入函数替换所带来的收益非常小,只是百分之零点几。但正如俗话说的,从世界范围来看。例如,在飞机和火箭科学方面也是如此。在努力减轻重量而不影响强度的过程中,一切都被修改了,甚至是螺栓。也许这就是为什么现在飞机是最安全的交通工具的原因之一,与逻辑相反。 我赞成合理的编程方法,你可以加速不违背逻辑,这样做更好,但任何 "疾病 "都需要被治疗,因为它是健康生活方式的反常现象。 恕我直言。 Alexey Navoykov 2017.08.27 17:58 #70 Andrey Kisselyov:如果你允许自己 "研究 "你的朋友,你就没有朋友,你周围有一些小丑,你有时会取笑他们,不重视他们的友谊和意见。看来尼古拉对书呆子的看法是对的 ))就个人而言,我没有看到那里有任何个人的参考。而且你的帖子中确实有很多字母,但每件事都偏离主题,你似乎只是为了争论而争论。 12345678 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
让我们举个例子。
如果你连机器的位数都改变了,你改成了64位,机器的精度也提高了,你的公式就会停止工作,因为机器的精度会比你设定的误差高很多。
恕我直言。
P.S.可能还有其他选择,你的公式会在一个数字范围内失败。不断调整错误,从切换到不同的机器,或编译器的变化,你没有被告知,或当你改变机器中的数字表示,或从削减一个小数部分 的数字时,编译一个新版本的终端...你不知道什么会发生变化,我不认为做一个IF或者苦苦猜测会发生什么,一遍又一遍地写错误是个好主意......
我认为有很多事情需要思考。
我不同意。公式(y=(int)(x+0.99999999999997);)在提高精度时不会停止工作,它的工作方式是一样的。和以前一样,错误将发生在DBL_EPSILON(当前值:0.00000000000002222204460492503131)和0.000000000003之间的数字小数部分的范围内。 即使DBL_EPSILON减少到零(当然它不可能),范围也将增加当前DBL_EPSILON的大小,即增加2.2204460492503131e-016。我相信人们甚至可以忽略这样一个错误范围。
而 "机器精度 "这个词到底是什么。有标准化的准确度,如双倍和其他类型。你的推理不算数。关于P.S.我就不说了))。我怕得罪人。
恕我直言。
我不同意。公式(y=(int)(x+0.99999999999997);)在提高精度时不会停止工作,它的工作方式是一样的。和以前一样,错误将发生在DBL_EPSILON(当前值:0.00000000000002222204460492503131)和0.000000000003之间的数字小数部分的范围内。 即使DBL_EPSILON减少到零(当然它不可能),范围也将增加当前DBL_EPSILON的大小,即增加2.2204460492503131e-016。我相信人们甚至可以忽略这样一个错误范围。
而 "机器精度 "这个词到底是什么。有标准化的准确度,如双倍和其他类型。你的推理不算数。关于P.S.我就不说了))。我怕得罪人。
恭敬地说。
尊重你自己,任何人都可以把你的脸擦得很脏,值得通过无礼的方式给对手一个理由吗? 我们都在某些方面有所发展,而其他事情对我们来说就是没有兴趣或不重要。
既然我们谈论的是汇编程序,以及你想象中编译器之后代码会发生什么,我就告诉你几个你可能理解的短语。
由于一个处理器在每个寄存器中的位数有限,在这些寄存器中进行加减或任何其他操作,在涉及到标志时有一些棘手之处。
作为一个在汇编程序中工作过的人,你应该明白我们在说什么。
那么,请告诉我在不同型号的处理器上的命令ADD是否会有溢出,如果你在不同的型号上使用相同的数字在汇编语言上写代码,一般来说,它不能适合任何寄存器,会被截断,从上一代的8位到现在的64位,以及未来如何变化(技术发展是如此短暂,刚刚过去40年,而我们已经有一个多核处理器而不是80年代初的灯)?
我的尊重。
恕我直言。
好了,先生们,你们已经表达了你们的观点。我将为你改变天花板的功能。
这个变体比变体:y=(int)(x+0.99999999999997) 慢25-50%; 但它是最大限度的正确,对负整数有效,比ceil(x)快3倍。
但我自己,作为一个普通人和失败者,我将使用带九的变体,因为我认为你所有的论点都很无聊,对我这个长期用汇编程序编程的人来说,因此知道编译后的代码会发生什么,这太过分了--把检查放在你可以不做的地方。
传统上,个人化意味着缺乏实质性的论证。
我同意,以及缺乏文化行为,试图羞辱对话者。
恭敬地说。
关于 "没有功劳",我没有对你的论点给予评价,也没有贬低你的功劳,我希望你。 尊重你自己,把你的脸揉在泥土里,可以任何人,是否给你的对手一个理由,要求他们的行动无礼? 我们都有发展的东西,而我们只是不感兴趣或与我们无关的。
追求个性,传统上意味着缺乏对案情的论证。
我同意,以及缺乏试图羞辱对话者的文化行为。
哇!如果我冒犯了任何人,我当然要道歉。你一定是被我说的话冒犯了。
好了,各位嘉宾,就这么定了。我正在为你改变天花板的功能。
但我自己,作为一个平民和C类学生,将使用带九的变体,因为我认为你的所有论点都是书呆子......
而 "机器精度 "这个词到底是什么。有标准化的精确度,如双倍和其他类型。你的推理不算数。关于P.S.我就不说了))。我怕得罪人。
嗯,你知道...我认为你有丰富的想象力。在普通的友好玩笑中,你会看到 "转移到人格","试图羞辱对话者","贬低优点"......。
还是我错过了什么,在其他地方我超越了体面的界限?
对不起,安德鲁,但我显然没有足够的知识和经验来理解你在那封P.S.中写的东西。
P.S. 可能还有其他的变体,当你的公式在某个数字范围内失效时。由于切换到另一台机器,或编译器的变化,你没有被告知,或机器对数字的表示方式的变化,或在新版本的终端编译时切割数字 的小数部分 而不断调整错误。我不知道什么可以改变,我不认为做中频或遭受猜测会发生什么的错误,一次又一次地开出错误的处方是一个好主意......
我再次为我的语气表示歉意。我一直提倡同事之间相互尊重,行为正确。恶魔在我心中。
是什么促使你将一百万的四舍五入时间从8毫秒减少到5毫秒或2毫秒? 如果连这样的延迟都被证明是一个瓶颈,那么处理器的真正负担是什么?我没有遇到过这样的需求。也许是一些抽象的、具有学术意义的东西?
最好是打开剖析,看看你的代码中哪里滞后,显然不是数学函数。 主要是循环,各种查询等等。 数学函数是最快的,试图在那里削减一些东西,我认为不是很明智。
哇!如果我冒犯了任何人,我当然要道歉。你一定是被我说的话冒犯了。
嗯,你知道...我认为你有一个生动的想象力。在一个简单的友好玩笑中,你看到了 "个人化"、"羞辱"、"轻视"......。
如果你允许自己 "嘲笑 "你的朋友,你就没有朋友,你周围有你有时嘲笑的小丑,不重视他们的友谊和意见。
还是我错过了什么,在其他地方我超越了体面的界限?
我不是你的朋友、兄弟,甚至是亲密的人,所以你可以给你一些评价,更何况是公开的评价。
对不起,安德里,我只是显然没有足够的知识和经验来理解你在那个P.S.中写的东西:如果有人向我解释你写的东西的含义,我将非常感激。
在P.S.中写的东西,你由于某种原因不能理解,其意义是显而易见的,你不知道你使用你的快速公式的技术将如何发展,你不知道平台将如何发展,你不知道随后将在编译器中加入什么,数字将如何在处理器寄存器空间中表示,你对此一无所知, 引入一个常数, 说它将积极地、永远地解决一切问题,可以说是妄想。
如果你考虑到你的公式会被论坛上的其他人采用,并可能把它放到C或Pascal或其他东西中,你也需要考虑到这些问题,数学在平台和编程语言上都没有限制。
我再次为我的语气表示歉意。我一直主张同事之间要相互尊重,行为要正确。我太过分了。
接受道歉。不要再犯同样的错误,否则你的话就是毫无意义的垃圾。
恭敬地说。
我不知道是什么让你觉得我很慢。相反,我认为我的算法是最快的。我只是有点速度狂。当然,使用这样一个替代性的四舍五入函数替换所带来的收益非常小,只是百分之零点几。但正如俗话说的,从世界范围来看。例如,在飞机和火箭科学方面也是如此。在努力减轻重量而不影响强度的过程中,一切都被修改了,甚至是螺栓。也许这就是为什么现在飞机是最安全的交通工具的原因之一,与逻辑相反。
恕我直言。
如果你允许自己 "研究 "你的朋友,你就没有朋友,你周围有一些小丑,你有时会取笑他们,不重视他们的友谊和意见。
看来尼古拉对书呆子的看法是对的 ))
就个人而言,我没有看到那里有任何个人的参考。而且你的帖子中确实有很多字母,但每件事都偏离主题,你似乎只是为了争论而争论。