Betrachten Sie zum Beispiel die folgenden Zahlen mit doppelter Genauigkeit:Ändert ein Minuszeichen nur das Vorzeichen?
x = 1232.2454545e-89;
y = -1232.2454545e-89;
Kann ich sicher sein, dass y
immer genau gleich -x
(oder Matlab uminus(x)
) ist? Oder sollte ich kleine numerische Unterschiede der Ordnung oder eps
erwarten, wie es oft bei numerischen Berechnungen passiert? Versuchen Sie zum Beispiel sqrt(3)^2-3
: Das Ergebnis ist nicht genau Null. Kann das auch mit einem unären Minus passieren? Ist es verlustbehaftet wie Quadratwurzel ist?
Ein anderer Weg, um die Frage zu stellen wäre: ein negativer numerische wörtliche immer gleich negiert sein positives Gegenstück?
Meine Frage bezieht sich auf Matlab, aber wahrscheinlich hat mehr mit dem IEEE-754-Standard als mit Matlab speziell zu tun.
Ich habe einige Tests in Matlab mit einigen zufällig ausgewählten Zahlen durchgeführt. Ich habe festgestellt, dass in diesen Fällen,
- Sie entpuppen sich als gleich in der Tat.
typecast(x, 'uint8')
typecast(-x, 'uint8')
und unterscheiden sich nur in dem Vorzeichenbit wie durch IEEE 754 double-precision format definiert.
Dies deutet darauf hin, dass die Antwort bejahend sein kann. Wenn das unäre Minus nur das Vorzeichenbit und nicht den Signifikanden ändert, geht keine Genauigkeit verloren.
Aber natürlich habe ich nur wenige Fälle getestet. Ich möchte sicher sein, dass dies in allen Fällen passiert.
Es scheint, wie dies auf dem [Rundungsmodus] abhängen könnte (https://en.wikipedia.org/wiki/Floating_point#Rounding_modes). Interessieren Sie sich für Ganzzahlen in bestimmten oder beliebigen Fließkommawerten? – horchler
@horchler Beliebige Fließkommawerte. Ja, ich denke, dass das Runden auf Null notwendig wäre, um die Antwort zu bestätigen. Ist bekannt, welchen Rundungsmodus Matlab verwendet? –
Weiß nicht. Der Standardrundungsmodus für IEEE-754 ist ["symmetrisch"] (https://en.wikipedia.org/wiki/Rounding#Round_half_to_even). Ich nehme an, dass es das verwendet, obwohl es auch systemabhängig sein kann. – horchler