Знает ли Complex-struct в .NET, какой знак 0 имеет? - PullRequest
0 голосов
/ 07 ноября 2018

В python, если мне нужно комплексное число 1 + 0i, оно будет представлено как (1+0j); если я хочу конъюгат, он представлен как (1-0j). В .NET 1 + 0i представляется как кортеж с плавающей точкой, (1, 0), и структура Complex, похоже, не показывает никакой информации относительно того, является ли 0 "отрицательным".

Чтобы учесть это, я представляю 0 значений с помощью Double.Epsilon, поскольку это достаточно близко, насколько я понимаю, и позволяет мне по существу иметь отрицательный ноль.

Когда я использую Complex.Conjugate(new Complex(1, 0)), знает ли .NET, что выражение теперь 1-0i где-то под капотом?

1 Ответ

0 голосов
/ 07 ноября 2018

Существует разница между +0 и -0. У них другое битовое представление.

На основании этого ответа Я написал юнит-тест (который проходит):

[TestMethod]
public void ComplexZeroTest()
{
    Complex c = new Complex(1, 0);
    Complex d = Complex.Conjugate(c);
    Assert.AreEqual(c.Real, d.Real);
    Assert.AreEqual(c.Imaginary, d.Imaginary);
    Assert.AreNotEqual(BitConverter.DoubleToInt64Bits(c.Imaginary), 
                       BitConverter.DoubleToInt64Bits(d.Imaginary));
}

Так что ответ на ваши вопросы, кажется, да.

...