问题描述
- c#中一个复数求模程序的异常处理的疑问
-
最近在用c#写一个复数类,其中要用到一个复数求模的运算。在网上找到了一些示例代码,但是不知道为什么要这么写。我自己的代码和示例代码都贴出来:
public double Abs2()
{
double result = Math.Sqrt(this.real * this.real + this.imag * this.imag);
return result;
}
public double Abs()
{
double x = Math.Abs(this.real);
double y = Math.Abs(this.imag);
if (this.real == 0)
{
return y;
}
if (this.imag == 0)
{
return x;
}
if (x > y)
{
return x * Math.Sqrt(1 + (y / x) * (y / x));
}
else
{
return y * Math.Sqrt(1 + (x / y) * (x / y));
}
}
其中的abs2是我自己写的。abs是网上找的。问一个朋友,他说是异常处理,怕越界。但是看了下double的取值范围,完全没觉得有这个必要。另外实际跑了一下,两者的结果都是一样的。
解决方案
Abs那样的写法也有问题
if (this.real == 0)
浮点数不能直接用等号比较。因为浮点数存在误差。
时间: 2024-10-26 20:14:28