/ / Windows dokładność obliczania mikrosekund - .net, windows, datetime

dokładność obliczeń w mikrosekundach - .net, windows, datetime

Próbuję przekonwertować DateTime na datę Juliana i odwrócić ją w systemie Windows 7.

    public static double ToJulianDate(this DateTime dt) {
return dt.ToOADate() + 2415018.5;
}
public static DateTime Julian2DT(this double julian) {
return DateTime.FromOADate(julian - 2415018.5);
}

Kiedy testuję te dwie funkcje, jak poniżej

var dt = DateTime.Now;
dt.ToString("yyyy-MM-dd HH:mm:ss.ffffff").Dump();
dt.ToJulianDate().Julian2DT().ToString("yyyy-MM-dd HH:mm:ss.ffffff").Dump();

odwrócona data juliańska ma zawsze nieco inną wartość od oryginalnej wartości DateTime o setki mikrosekund.

Czy napisałem niepoprawny kod lub w systemie czasu Windows występuje niedokładność w mikrosekundach?

Odpowiedzi:

1 dla odpowiedzi № 1

Jest to naturalny wynik faktu, że data juliańska jest reprezentowana jako double, które zawsze będą miały ograniczoną dokładność. Na przykład bieżąca wartość wynosi około 2456348.78370906. To daje 7 cyfr znaczących przed przecinkiem - i a double z dokładnością do „około” 15 miejsc po przecinku. Mamy więc około 8 cyfr dziesiętnych dokładności w części dziesiętnej ... co ma oznaczać dzień.

Teraz 1 dzień / 100000000 = 0,000864 sekundy. Spodziewam się więc, że dokładność będzie mniejsza niż milisekunda.

Jeśli ty don "t dodaj stałą dla daty juliańskiej, wszystko wyglądaraczej różaniec - w tym momencie bieżąca wartość wynosi tylko około 41330, więc w wartości jest więcej „miejsca” na precyzję pod względem pory dnia. Zasadniczo, im większe wartości zmiennoprzecinkowe, tym gorsza precyzja, w wartościach bezwzględnych (różnica między sąsiednimi wartościami staje się większa).