/ / windows microseconds точност на изчисление - .net, прозорци, datetime

Windows - микросекунди точност на изчисление - .net, прозорци, datetime

Опитвам се да преобразувам DateTime в дата Julian и да го обърна под 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);
}

Когато тествам тези две функции, както е показано по-долу

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();

обратната Julian дата винаги е малко по-различна от първоначалната стойност на DateTime с стотици микросекунди.

Дали съм написал грешен код или има някакви микросекунди неточност в Windows система за време?

Отговори:

1 за отговор № 1

Това е естествен резултат от факта, че юлийската дата е представена като double, които винаги ще имат ограничена точност. Например текущата стойност е около 2456348.78370906. Това дава 7 значещи цифри преди десетичната запетая - и a double е точна само за "около" 15 десетични числа. Така че имаме десетични знаци на точност в десетичната част ... която е предназначена да представлява ден.

Сега 1 ден / 100000000 = 0,000864 секунди. Така че очаквах само точност до една милисекунда.

Ако ти дон "т добавете константата за дата на Юлиан, нещата изглеждатпо-розови - в този момент текущата стойност е само около 41330, така че има повече "стая" в рамките на стойността за точност по отношение на времето на деня.По принцип, по-големите стойности на плаваща точка получават, толкова по- в абсолютна стойност (разликата между съседните стойности става по-голяма.)