C# 两者之间的区别:除以双变量| | | | |除以带小数点的整数变量(例如1/2.00)| | | |在公式中加上(双精度)
以下备选方案之间有什么区别吗 在这个简单的循环中,结果之间似乎没有任何差异,但我想知道在某些情况下,不同的方法是否会导致结果差异。 我想知道这些方法是完全相同的还是有一些细微的差别 x是双倍的:C# 两者之间的区别:除以双变量| | | | |除以带小数点的整数变量(例如1/2.00)| | | |在公式中加上(双精度),c#,C#,以下备选方案之间有什么区别吗 在这个简单的循环中,结果之间似乎没有任何差异,但我想知道在某些情况下,不同的方法是否会导致结果差异。 我想知道这些方法是完全相同的还是有一些细微的差别 x是双倍的: double x = 2; double sum = 0; while (true) { sum += 1 / ((x - 1) * 2); x++; } x为int,
double x = 2;
double sum = 0;
while (true)
{
sum += 1 / ((x - 1) * 2);
x++;
}
x为int,但在公式中2之前为双精度:
int x = 2;
double sum = 0;
while (true)
{
sum += 1 / ((x - 1) * (double)2);
x++;
}
x为int,但2写为十进制:
int x = 2;
double sum = 0;
while (true)
{
sum += 1 / ((x - 1) * 2.00);
x++;
}
评论中的结果及其类型:
var a = 2; //int
var b = 2.0; //double
var c = 2d; //double
var d = 2f; //float (alias of System.Single)
var e = 2m; //decimal
var f = 2l; //long
var g = 2ul; //ulong
var h = 2.0m; //decimal
var i = 2.0f; //float
var t = 1 / 2.0; //double
var u = 1 / 2; //int!
var v = 1 / ((6 - 1) * 2); //int!
var w = 1 / 2 + 6 / 2.0 //int + double = 0 + 3 = 4
看看你的样品:
由于double参与所有公式,结果将是double,它与sum类型匹配,并将根据类型正确计算
您明确地将int转换为double-look 1
2.00是双视1
所以,所有样本都将以相同的方式计算总和
除了int-type将在无限循环的早期溢出之外,没有区别*-您被困在一个无止境的while循环中,无法摆脱它
*离开循环的唯一方法是通过异常。。。如果x++和x的类型为double…则double溢出需要更长的时间。您可以尝试比较每个块生成的CIL,并查看差异。另外,您可能想尝试使用非常大和非常小的数字。让我们假设抖动在不同的情况下做了不同的事情,您将如何处理这些信息?