除以零return无限
Divide by zero return infinite
我是编程新手,遇到除以零的问题。问题在代码的注释中解释。
public float Divide (float a, float b)
{
if (!Equals (b, 0))
return a / b;
else
return 0; // what should this return contains not to giving me back infinite?
// But for example message that you can't divide by zero?
}
你不应该 returning 0。你应该 return float.NegativeInfinity
(如果 a
是负数)或 float.PositiveInfinity
(如果 a
为正),如果 a
和 b
均为 0,则为 float.NaN
。请注意,这与在代码中执行此操作的行为相同:
return a / b;
因此您可能只想将代码更改为:
public float podil (float a, float b) {
return a / b;
}
如果除以 0 表示应用程序中的特定非法条件,并且您不希望传播 float.NaN
值,则应抛出异常。喜欢:
public float podil (float a, float b) {
var result = a / b;
if (float.IsNan(result))
throw new DivideByZeroException(); // or a different exception type.
return result;
}
看到这个fiddle,它会returnfloat.PositiveInfinity
。
如果您不喜欢默认值,return 由您决定...通常会抛出异常,但它不是 "return"。
最接近的答案是 return nullable float?
-
public float? podil (float a, float b)
{
return b == 0 ? (float?) null : a / b;
}
您也可以考虑 double.PositiveInfinity
,但处理异常或可空类型通常更容易。
注意:比较浮点数与 0(使用 Equals
或 ==
)时要小心,因为之前的计算可能存在舍入问题 - Is it wrong to compare a double to 0 like this: doubleVariable==0?)
你想要的结果是什么?无穷大的价值? float
有 none。如果 b
为零,则不要调用该方法,除非您想要特定的结果。
至于您的代码,您可以这样做(这只是许多解决方案中的一种):使用内置的无穷大常数,例如:
public float Divide (float a, float b)
{
return Equals (b, 0) ? float.NegativeInfinity : a / b;
}
我是编程新手,遇到除以零的问题。问题在代码的注释中解释。
public float Divide (float a, float b)
{
if (!Equals (b, 0))
return a / b;
else
return 0; // what should this return contains not to giving me back infinite?
// But for example message that you can't divide by zero?
}
你不应该 returning 0。你应该 return float.NegativeInfinity
(如果 a
是负数)或 float.PositiveInfinity
(如果 a
为正),如果 a
和 b
均为 0,则为 float.NaN
。请注意,这与在代码中执行此操作的行为相同:
return a / b;
因此您可能只想将代码更改为:
public float podil (float a, float b) {
return a / b;
}
如果除以 0 表示应用程序中的特定非法条件,并且您不希望传播 float.NaN
值,则应抛出异常。喜欢:
public float podil (float a, float b) {
var result = a / b;
if (float.IsNan(result))
throw new DivideByZeroException(); // or a different exception type.
return result;
}
看到这个fiddle,它会returnfloat.PositiveInfinity
。
如果您不喜欢默认值,return 由您决定...通常会抛出异常,但它不是 "return"。
最接近的答案是 return nullable float?
-
public float? podil (float a, float b)
{
return b == 0 ? (float?) null : a / b;
}
您也可以考虑 double.PositiveInfinity
,但处理异常或可空类型通常更容易。
注意:比较浮点数与 0(使用 Equals
或 ==
)时要小心,因为之前的计算可能存在舍入问题 - Is it wrong to compare a double to 0 like this: doubleVariable==0?)
你想要的结果是什么?无穷大的价值? float
有 none。如果 b
为零,则不要调用该方法,除非您想要特定的结果。
至于您的代码,您可以这样做(这只是许多解决方案中的一种):使用内置的无穷大常数,例如:
public float Divide (float a, float b)
{
return Equals (b, 0) ? float.NegativeInfinity : a / b;
}