Wenn ich laufen die AnweisungÄnderungen an Math.exp oder doppelte Ausführung in .net 4.5.2
Math.Exp(113.62826122038274).ToString("R")
auf einer Maschine mit .net 4.5.1 installiert ist, dann bekomme ich die Antwort
2.2290860617259248E+49
Allerdings, wenn ich den gleichen Befehl auf einem Computer mit .NET Framework 4.5.2 installiert laufen, dann bekomme ich die Antwort
2.2290860617259246E+49
(dh die endgültige d igit Änderungen)
Ich weiß, dass dies in rein numerischen Begriffen weitgehend unbedeutend ist, aber kennt jemand irgendwelche Änderungen, die in .net 4.5.2 vorgenommen wurden, die die Änderung erklären würde?
(ich es vorziehen, nicht ein Ergebnis zum anderen, ich bin nur daran interessiert zu verstehen, warum sie sich geändert hat) Ich
Wenn ich Ausgang
The input in roundtrip format
The input converted to a long via BitConverter.DoubleToInt64Bits
Math.Exp in roundtrip format
Math.Exp converted to a long via BitConverter.DoubleToInt64Bits
dann auf 4.5.1 bekommen
113.62826122038274
4637696294982039780
2.2290860617259248E+49
5345351685623826106
und auf 4.5.2 bekomme ich:
113.62826122038274
4637696294982039780
2.2290860617259246E+49
5345351685623826105
Also für exakt den gleichen Eingang, bekomme ich einen anderen Ausgang (wie aus den Bits zu sehen, so dass keine Hin- und Rück Formatierung beteiligt ist)
Weitere Details:
Zusammengestellt einmal VS2015 mit
Beide Maschinen dass ich die Binärdateien leite auf 64bit
Man hat .net 4.5.1 installiert haben, andere die 4.5.2
Just for Klarheit: die String-Konvertierung irrelevant ist ... ich die Änderung der Ergebnisse rega erhalten unabhängig davon, ob es sich um eine String-Konvertierung handelt. Ich habe das nur erwähnt, um die Veränderung zu demonstrieren.
ist net46 auch installiert? – Dbl
@ AndreasMüller - Nein, nur 4.5.2, obwohl die 4.6 die gleiche Antwort wie 4.5.2 manifestiert - die Änderung scheint von 4.5.2 nicht eingeführt zu werden 4.6 –
Übersetzen Sie den Code auf jeder Maschine? Wenn ja, verwendet einer von ihnen Roslyn und der andere den "alten" Compiler? Das könnte Dinge erklären - aber um Dinge zu reduzieren, würde ich vorschlagen, den 'Math.Exp'-Aufruf zu entfernen und einfach' 113.62826122038274.ToString ("R") auszudrucken. Wenn mein Verdacht stimmt, werden Sie auch dort andere Ergebnisse sehen. –