我想计算严格正整数的ceiling除法。我可以在以下两种实现之间进行选择:
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 为 8,677 毫秒,Math.Ceiling()
为 9,749 毫秒,但这是 0.0000087 毫秒与每次调用 0.0000097 毫秒相比,可以忽略不计。
关于c# - 使用 lambda 重新定义函数或调用标准 API (Math.Ceiling),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8491874/