【发布时间】:2009-07-10 18:26:24
【问题描述】:
我只是想知道 .net 框架中是否内置了任何东西,我可以轻松地返回两个数字之间的增量?我编写了执行此操作的代码,但听起来应该已经在框架中了。
【问题讨论】:
-
这个问题是否确定浮点数是否在给定范围内? (否则或多或少是一个减法问题......
-
减法。 . .加法是个棘手的朋友。
我只是想知道 .net 框架中是否内置了任何东西,我可以轻松地返回两个数字之间的增量?我编写了执行此操作的代码,但听起来应该已经在框架中了。
【问题讨论】:
delta = Math.Abs(a - b);
【讨论】:
a-b 等于Int32.MinValue 时,由于System.Overflow 异常,此代码将崩溃。更多详情here.
-x 到(x-1)。当然,如果我尝试在相同的数据类型中容纳+x 以获得它必然失败的绝对值:)
我的印象是“delta”是两个数字之间的差。
除非你以不同的方式告诉我,否则我认为你想要的是:
delta = Math.Abs(a - b);
【讨论】:
public static int Delta(int a, int b)
{
int delta = 0;
if (a == b)
{
return 0;
}
else if (a < b)
{
while (a < b)
{
a++;
delta++;
}
return delta;
}
else
{
while (b < a)
{
b++;
delta++;
}
return delta;
}
}
:p
哦,男孩,我希望没有(未来的)雇主遇到这个,在他到达这篇文章的结尾之前停止厌恶地阅读..
【讨论】:
Linq 版本(需要 CLR 4.0)。
(打断手指,清清嗓子)
var delta = (from t in Enumerable.Range(a, a).Zip(Enumerable.Range(b, b))
select Math.Abs(t.Item1 - t.Item2))
.First();
【讨论】:
这不是减号运算符的作用吗? :p
【讨论】:
public static int Delta(int a, int b)
{
return a > 0? Delta(a-1, b-1) : a < 0 ? Delta(a+1, b+1) : b > 0 ? b : -b;
}
我认为这比 @JulianR Delta 实现还要好:-p
编辑:我没有意识到@Robert Harvey 已经提出了这个建议,感谢他 ;-)
【讨论】:
两个数字的增量是多少? Delta在集合论和微积分中有一定的意义,但这不是指数字!
如果你想计算两个数字 a 和 b 之间的差,你可以写 |a - b|,在 C# 中是 Math.Abs(a - b)。
【讨论】:
我决定修改上面 JulianR 的有趣回答。
代码更短,但可能更棘手:
public static int Delta(int a, int b)
{
int delta = 0;
while (a < b)
{
++a;
++delta;
}
while (b < a)
{
++b;
++delta;
}
return delta;
}
(对于幽默受损的人......这并不比启动线程的奇怪问题更严重)
【讨论】:
(r1+r2)/2
两个数字之间的平均值。
【讨论】: