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

标签 c# casting lambda

我想计算严格正整数的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/

相关文章:

c# - 在内存中复制或加载 sqlite 数据库? C#?

c# - 读取 appsettings.json - 字段保持为空

c# - 如何在 C# 中将一维数组的数据添加到二维数组

c# - 取消从应用程序调用网络服务

c++ - 在 C++ 中将 double 转换为 intptr_t

android - 如何将 Double 值从一个 Activity 检索到另一个 Activity ?

java - 将字符串转换为 JInternalFrame

python - tkinter:将多个按钮 lambda 映射到一个标签?

javascript - 关于浏览器javascript引擎的理论问题

C++11 在公共(public)函数中设置 lambda