W Pythonie, jeśli chcę liczbę zespoloną 1+0i, będzie ona reprezentowana jako (1+0j); jeśli chcę koniugatu, jest on reprezentowany jako (1-0j). Na platformie .NET 1 + 0i jest reprezentowana jako krotka elementów zmiennoprzecinkowych (1, 0), a struktura Complex nie wydaje się wyświetlać żadnych informacji dotyczących tego, czy 0 jest „ujemne”.

Aby to wyjaśnić, reprezentowałem wartości 0 za pomocą Double.Epsilon, ponieważ jest to wystarczająco blisko, jeśli o mnie chodzi, i pozwala mi zasadniczo mieć ujemne zero.

Kiedy używam Complex.Conjugate(new Complex(1, 0)), czy platforma .NET wie, że wyrażenie jest teraz 1-0i gdzieś pod maską?

1
normal chemist 7 listopad 2018, 00:10

1 odpowiedź

Najlepsza odpowiedź

Jest różnica między +0 a -0. Mają inną reprezentację bitową.

Na podstawie tej odpowiedzi napisałem test jednostkowy (który przechodzi):

[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));
}

Tak więc odpowiedź na twoje pytania wydaje się być twierdząca.

2
Cris Luengo 7 listopad 2018, 00:41