누군가 나에게 이것을 설명 할 수 있습니까? C #에서 double.NaN은 double.NaN과 같지 않습니다.
bool huh = double.NaN == double.NaN; // huh = false
bool huh2 = double.NaN >= 0; // huh2 = false
bool huh3 = double.NaN <= 0; // huh3 = false
double.NaN과 비교할 수있는 상수는 무엇입니까?
누군가 나에게 이것을 설명 할 수 있습니까? C #에서 double.NaN은 double.NaN과 같지 않습니다.
bool huh = double.NaN == double.NaN; // huh = false
bool huh2 = double.NaN >= 0; // huh2 = false
bool huh3 = double.NaN <= 0; // huh3 = false
double.NaN과 비교할 수있는 상수는 무엇입니까?
NULLSQL에서
답변:
궁금하다면 Double.IsNaN다음과 같습니다.
public static bool IsNaN(double d)
{
return (d != d);
}
펑키?
public const double NaN = (double) 1.0 / (double) 0.0;
public const double NaN = (double)0.0 / (double)0.0; 참조 소스에 대한 링크를 말하는 것 입니다. 지적 해 주셔서 감사합니다. 또 다른 메모에서 : 잘못되고 거짓말을하는 것은 두 개의 완전히 다른 것들
Double.IsNaN을 사용하십시오 .
Double.IsNan () 을 사용 하여 여기에서 동등성을 테스트하십시오. 그 이유는 NaN이 숫자가 아니기 때문입니다.
NaN에 대해 아는 유일한 사실은 "숫자가 아님"이라는 것입니다. 그렇다고 상태와 연관 될 수있는 값이 있다는 의미는 아닙니다. 예를 들면 :
∞ + (-∞) = NaN
0/0 = NaN
(∞ + (-∞)) <> (0/0)
다음은 시연 할 몇 가지 C #입니다.
var infinity = 100d / 0;
var negInfinity = -100d / 0;
var notANumber = infinity + negInfinity;
Console.WriteLine("Negative Infinity plus Infinity is NaN: {0}", double.IsNaN(notANumber));
var notANumber2 = 0d / 0d;
Console.WriteLine("Zero divided by Zero is NaN: {0}", double.IsNaN(notANumber2));
Console.WriteLine("These two are not equal: {0}", notANumber == notANumber2);
이유 Double.NaN != Double.NaN는 간단합니다.
0/0과 동일 할 것으로 예상하십니까 Math.Sqrt(-3)? 그리고 Math.Sqrt(-7)?
Equals()NaN에 대해 재정의되지 않은 C #에 버그가 있습니다 .
Assert.IsTrue(Double.NaN != Double.NaN);
Assert.IsTrue(Double.NaN.Equals(Double.NaN));
동시에
Assert.IsTrue(Double.PositiveInfinity == Double.NegativeInfinity);
Assert.IsTrue(Double.PositiveInfinity.Equals(Double.PositiveInfinity));
// same for Double.NegativeInfinity and Single
Double및에 정적 함수 사용 Single, 예 :
Double.IsNaN(value) && Double.IsInfinity(value);
또는 더 구체적으로 :
Double.IsPositiveInfinity(value);
Double.IsNegativeInfinity(value);
Equality 연산자는 두 개의 NaN 값이 서로 다른 것으로 간주합니다. 일반적으로 Double 연산자는 Double.NaN을 다른 Double 값과 비교하는 데 사용할 수 없지만 비교 메서드 (예 : Equals 및 CompareTo )는 할 수 있습니다. 아래 예 참조
msdn 에서 참조
class Program
{
static void Main(string[] args)
{
Double i = Double.NaN;
while (!i.Equals(i)) //this would be result in false
//while(i != i) // this would result in true.
{
Console.WriteLine("Hello");
}
}
}
여기 에 .net 바이올린이 있습니다.