我想计算严格正整数的上限除法.我可以选择以下两种实现:
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
Run Code Online (Sandbox Code Playgroud)
和
var x = (int)Math.Ceiling((double)y / (double)z);
Run Code Online (Sandbox Code Playgroud)
第二个版本(Math.Ceiling)似乎与第一个版本(带有lambda)相同,但添加了3个转换.所以我觉得要使用第一个.我错过了什么吗?
(编辑以确定它只是处理严格正整数的事实)
就个人而言,我会避免担心优化int- > double转换,这些通常是您对性能的担忧.是的,他们可以加起来,但你需要在紧密循环或类似的东西中做很多事情.
我坚持使用,Math.Ceiling()因为你要做的事情非常明显,因此更容易维护.如果您发现代码很慢,那么首先优化并攻击最大的问题点.
这些超过10亿次迭代的时间,λ为8,677 ms,为Math.Ceiling()9,749 ms,但是每次调用为0.0000087 ms vs 0.0000097 ms,这可以忽略不计.
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |