未经计算的双舍入误差
double rounding error without calculation
我在 C# (.Net 4.6.1) 中观察到一个(对我而言)浮点变量的奇怪问题。
我有一个简单的观点class:
public class Point
{
public readonly double X;
public readonly double Y;
public Point(double x, double y)
{
this.X = x;
this.Y = y;
}
//...
}
和一个包含方法的矩形 class。有时 - 很难重现 - 当我将 Point 对象传递给 Rectangle 对象的 Contains 方法时,X 或 Y 的值不相同。变量之间没有任何计算或任何其他变化。只是获取变量值。在调用方法中,该值正常,在被调用方法中,该值存在舍入误差。
这里有什么问题?
为什么被调用的方法里面还有另一个值?
最后这个值没有改变。所以在调用方法中这个值后面还是可以的。
提前致谢!
马斯
好吧,那是我的错误。我假设 Point 的 ToString 方法显示了完整的值。通常是这样。
public override string ToString()
{
return $"{this.X};{this.Y}";
}
该值在调用方方法中也存在舍入错误。
我在 C# (.Net 4.6.1) 中观察到一个(对我而言)浮点变量的奇怪问题。
我有一个简单的观点class:
public class Point
{
public readonly double X;
public readonly double Y;
public Point(double x, double y)
{
this.X = x;
this.Y = y;
}
//...
}
和一个包含方法的矩形 class。有时 - 很难重现 - 当我将 Point 对象传递给 Rectangle 对象的 Contains 方法时,X 或 Y 的值不相同。变量之间没有任何计算或任何其他变化。只是获取变量值。在调用方法中,该值正常,在被调用方法中,该值存在舍入误差。
这里有什么问题? 为什么被调用的方法里面还有另一个值?
最后这个值没有改变。所以在调用方法中这个值后面还是可以的。
提前致谢!
马斯
好吧,那是我的错误。我假设 Point 的 ToString 方法显示了完整的值。通常是这样。
public override string ToString()
{
return $"{this.X};{this.Y}";
}
该值在调用方方法中也存在舍入错误。