函数ceil()、round()、floor()的执行速度 - 页 7

 
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.我就不说了))。我怕得罪人。

恕我直言。

 
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年代初的灯)?

我的尊重。
 
最好是打开剖析,看看你的代码中哪里执行得慢,显然不是数学函数。 大多数是循环,各种查询等等。数学函数是最快的,在我看来,试图在那里削减一些东西是不太明智的。

恕我直言。
 
Nikolai Semko:

好了,先生们,你们已经表达了你们的观点。我将为你改变天花板的功能。

这个变体比变体:y=(int)(x+0.99999999999997) 慢25-50% 但它是最大限度的正确,对负整数有效,比ceil(x)快3倍。

但我自己,作为一个普通人和失败者,我将使用带九的变体,因为我认为你所有的论点都很无聊,对我这个长期用汇编程序编程的人来说,因此知道编译后的代码会发生什么,这太过分了--把检查放在你可以不做的地方。

传统上,转向个人主义意味着缺乏对案情的争论。但我仍然问你一个问题。是什么让你把一百万次四舍五入的时间从8毫秒缩短到5或2毫秒? 如果连这样的延迟都变成了瓶颈,那么处理器上的真正负载是什么?我没有遇到过这样的需求。也许是一些抽象的、有学术意义的东西?
 
Vladimir:
传统上,个人化意味着缺乏实质性的论证。

我同意,以及缺乏文化行为,试图羞辱对话者。

恭敬地说。

 
Andrey Kisselyov:
关于 "没有功劳",我没有对你的论点给予评价,也没有贬低你的功劳,我希望你。 尊重你自己,把你的脸揉在泥土里,可以任何人,是否给你的对手一个理由,要求他们的行动无礼? 我们都有发展的东西,而我们只是不感兴趣或与我们无关的。
弗拉基米尔
追求个性,传统上意味着缺乏对案情的论证。
安德烈-基塞廖夫

我同意,以及缺乏试图羞辱对话者的文化行为。

哇!如果我冒犯了任何人,我当然要道歉。你一定是被我说的话冒犯了。

尼古拉-森科

好了,各位嘉宾,就这么定了。我正在为你改变天花板的功能。

但我自己,作为一个平民和C类学生,将使用带九的变体,因为我认为你的所有论点都是书呆子......

尼古拉-森科

而 "机器精度 "这个词到底是什么。有标准化的精确度,如双倍和其他类型。你的推理不算数。关于P.S.我就不说了))。我怕得罪人。

嗯,你知道...我认为你有丰富的想象力。在普通的友好玩笑中,你会看到 "转移到人格","试图羞辱对话者","贬低优点"......。

还是我错过了什么,在其他地方我超越了体面的界限?

对不起,安德鲁,但我显然没有足够的知识和经验来理解你在那封P.S.中写的东西。

安德烈-基塞廖夫
P.S. 可能还有其他的变体,当你的公式在某个数字范围内失效时。由于切换到另一台机器,或编译器的变化,你没有被告知,或机器对数字的表示方式的变化,或在新版本的终端编译时切割数字 的小数部分不断调整错误我不知道什么可以改变,我不认为做中频或遭受猜测会发生什么的错误,一次又一次地开出错误的处方是一个好主意......
如果有人能解释我写的东西的含义,我将非常感激。
我再次为我的语气表示歉意。我一直提倡同事之间相互尊重,行为正确。恶魔在我心中。
 
Vladimir:
是什么促使你将一百万的四舍五入时间从8毫秒减少到5毫秒或2毫秒? 如果连这样的延迟都被证明是一个瓶颈,那么处理器的真正负担是什么?我没有遇到过这样的需求。也许是一些抽象的、具有学术意义的东西?
安德烈-基塞廖夫
最好是打开剖析,看看你的代码中哪里滞后,显然不是数学函数。 主要是循环,各种查询等等。 数学函数是最快的,试图在那里削减一些东西,我认为不是很明智。
我不知道你为什么认为我很慢。相反,我认为我的算法是最快的。 我只是有点速度狂。当然,使用这样一个替代性的四舍五入函数替换所带来的收益非常小,只是百分之零点几。但正如俗话说的,从世界范围来看。例如,在飞机和火箭科学方面也是如此。在努力减轻重量而不影响强度的过程中,一切都被修改了,甚至是螺栓。也许这就是为什么与逻辑相反,如今飞机是最安全的运输方式的原因之一。
 
Nikolai Semko:

哇!如果我冒犯了任何人,我当然要道歉。你一定是被我说的话冒犯了。

嗯,你知道...我认为你有一个生动的想象力。在一个简单的友好玩笑中,你看到了 "个人化"、"羞辱"、"轻视"......。

如果你允许自己 "嘲笑 "你的朋友,你就没有朋友,你周围有你有时嘲笑的小丑,不重视他们的友谊和意见。

尼古拉-森科

还是我错过了什么,在其他地方我超越了体面的界限?

我不是你的朋友、兄弟,甚至是亲密的人,所以你可以给你一些评价,更何况是公开的评价。

尼古拉-森科
对不起,安德里,我只是显然没有足够的知识和经验来理解你在那个P.S.中写的东西:如果有人向我解释你写的东西的含义,我将非常感激。

在P.S.中写的东西,你由于某种原因不能理解,其意义是显而易见的,你不知道你使用你的快速公式的技术将如何发展,你不知道平台将如何发展,你不知道随后将在编译器中加入什么,数字将如何在处理器寄存器空间中表示,你对此一无所知 引入一个常数, 说它将积极地、永远地解决一切问题,可以说是妄想。

如果你考虑到你的公式会被论坛上的其他人采用,并可能把它放到C或Pascal或其他东西中,你也需要考虑到这些问题,数学在平台和编程语言上都没有限制。

尼古拉-森科
我再次为我的语气表示歉意。我一直主张同事之间要相互尊重,行为要正确。我太过分了。

接受道歉。不要再犯同样的错误,否则你的话就是毫无意义的垃圾。

恭敬地说。

 
Nikolai Semko:
我不知道是什么让你觉得我很慢。相反,我认为我的算法是最快的。我只是有点速度狂。当然,使用这样一个替代性的四舍五入函数替换所带来的收益非常小,只是百分之零点几。但正如俗话说的,从世界范围来看。例如,在飞机和火箭科学方面也是如此。在努力减轻重量而不影响强度的过程中,一切都被修改了,甚至是螺栓。也许这就是为什么现在飞机是最安全的交通工具的原因之一,与逻辑相反。
我赞成合理的编程方法,你可以加速不违背逻辑,这样做更好,但任何 "疾病 "都需要被治疗,因为它是健康生活方式的反常现象。

恕我直言。
 
Andrey Kisselyov:

如果你允许自己 "研究 "你的朋友,你就没有朋友,你周围有一些小丑,你有时会取笑他们,不重视他们的友谊和意见。

看来尼古拉对书呆子的看法是对的 ))

就个人而言,我没有看到那里有任何个人的参考。而且你的帖子中确实有很多字母,但每件事都偏离主题,你似乎只是为了争论而争论。