mogę być czegoś brakuje podstawowych, ale za to interpretera sesji :Dlaczego -0,0 nie jest takie samo jak 0.0?
>>> -0.0 is 0.0
False
>>> 0.0 is 0.0
True
>>> -0.0 # The sign is even retained in the output. Why?
-0.0
>>>
można by pomyśleć, że interpreter Pythona by uświadomić sobie, że -0.0
i 0.0
są takie same liczby. W rzeczywistości, porównuje je jako równy:
>>> -0.0 == 0.0
True
>>>
Więc dlaczego jest Python różnicowania między nimi i generowania zupełnie nowy obiekt dla -0.0
? Nie robi tego z liczb:
>>> -0 is 0
True
>>> -0 # Sign is not retained
0
>>>
Teraz zdaję sobie sprawę, że liczb zmiennoprzecinkowych są ogromnym źródłem problemów z komputerami, ale te problemy są zawsze w odniesieniu do ich dokładności. Na przykład:
>>> 1.3 + 0.1
1.4000000000000001
>>>
Ale to nie jest problem z dokładnością, prawda? Chodzi o to, że mówimy tutaj o znaku liczby, a nie o jej dziesiętnych miejscach.
mogę odtworzyć to zachowanie zarówno w Pythonie 2.7 i Python 3.4, więc nie jest to kwestia wersji specyficzne.
Wierzę, że jest to funkcja reprezentacji zmiennoprzecinkowej IEEE 754, co oznaczałoby, że nie jest ona specyficzna dla Pythona. –
Integer overflow jest prawdopodobnie poważniejszym "źródłem problemów z komputerami". – tmyklebu
Dlaczego używasz 'jest' do porównań liczbowych? Wiele z twoich pytań ma niewiele wspólnego z podpisanymi zerami: spróbuj 'x = 2.3',' y = 2.3', a następnie 'x to y'. A potem, dla zabawy, spróbuj 'x = 2.3; y = 2,3' (wszystko w jednym wierszu), a następnie 'x oznacza y'. –