用lambda重新定义函数或调用标准API(Math.Ceiling) - c#

我想计算严格为正整数的上限除法。我可以在以下两种实现方式之间进行选择:

var ceil = new Func<int, int, int>((a, b) => a % b > 0 ? a / b + 1 : a / b);
var x = ceil(y, z); // y and z being int previously defined

var x = (int)Math.Ceiling((double)y / (double)z);

第二个版本(Math.Ceiling)似乎与第一个版本相同(带有lambda),但添加了3个转换。所以我想使用第一个。我想念什么吗?

(经过编辑以精确说明它只能处理严格的正整数)

参考方案

就个人而言,我会避免担心优化int-> double转换,这些转换通常对您的性能影响最小。是的,它们可以累加,但是您需要做得很紧,或者做一些类似的事情。

我坚持使用Math.Ceiling(),因为它很明显您正在尝试做,因此更易于维护。如果您发现代码很慢,那么请先优化并攻击最大的故障点。

对这些超过10亿次迭代进行计时,lambda为8677 ms,Math.Ceiling()为9749 ms,但这是0.0000087 ms与每个调用0.0000097 ms可以忽略不计。

Math.log无法正常工作-为什么? - java

//以下方法无法正常工作,我不确定为什么。日志结果不正确。 0.5返回日志值-0.6931471805599453,但是我的计算器显示它应该返回-3.3。public static void printCommonLogTable() { double x = 0; while (x <= 10) { System.out.println (x+ &#…

Math.max和Math.min输出允许的最高和最低值 - java

所以我正在尝试制作一个程序,该程序将输出总和,平均值以及最小和最大值。除了最小和最大值输出2147483647和-2147483647,我基本上已经弄清楚了所有东西,我相信这是Java将计算的绝对最小和最大值。无论如何,我想计算用户输入的数字,因此这显然是不正确的。这是我的课。我认为addValue方法出了问题。public class DataSet { …

如何将值从0限制为无限到0到1? - java

我有一个Java程序,该程序会生成一个从0到无穷大的float值。我需要做的是,此浮点数越高,程序触发功能AttackPawn()的机会就越高。我已经发现我需要函数Math.random(),该函数给出一个介于0和1之间的随机值。如果Math.random()低于转化为0到1之间的浮点数的攻击性,我将其称为函数AttackPawn( )。但是现在我被困住了,…

如何避免math.sin(math.pi * 2 * VERY LARGE NUMBER)的错误裕度比math.sin(math.pi * 2)大得多? - python

我在其他问题中读到,例如sin(2π)由于浮点表示而不是零,但非常接近。这个很小的错误在我的代码中是没有问题的,例如,我可以四舍五入小数。但是,当将2π与非常大的数字相乘时,误差会放大很多。答案应该为零(或接近),但距离很远。我的想法根本上是做错了吗?如果不是,如何避免周期为(2 * PI * X)→∞的π浮点数的误差容限被“放大”?请注意,最后3个结果都是…

根据四个角获得正方形的中心 - java

我的代码有问题,应该给我一个正方形的中心。正方形作为角点保存在double [] []数组中。static double[] getMid(double[][] points){ double[] mid = new double[2]; double a = Math.sqrt( (points[0][0] - points[1][0]) * (point…