/ / windows microseconds précision de calcul - .net, windows, datetime

précision du calcul des microsecondes de Windows - .net, windows, datetime

J'essaie de convertir DateTime en date du calendrier Julien et de l’inverser sous 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);
}

Quand je teste ces deux fonctions comme ci-dessous

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

la date julienne inversée a toujours une valeur légèrement différente de la valeur DateTime d'origine de plusieurs centaines de microsecondes.

Ai-je écrit un code erroné ou des inexactitudes de quelques microsecondes dans le système de temps Windows?

Réponses:

1 pour la réponse № 1

C’est un résultat naturel du fait que la date julienne est représentée comme un double, qui aura toujours une précision limitée. Par exemple, la valeur actuelle est d'environ 2456348.78370906. Cela donne 7 chiffres significatifs avant la virgule décimale - et un double est seulement précis à "environ" 15 décimales. Nous avons donc environ 8 chiffres décimaux d’exactitude dans la partie décimale ... ce qui est censé représenter un jour.

Maintenant, 1 jour / 100000000 = 0,000864 secondes. Donc, je ne m'attendais qu'à une précision d'un peu moins d'une milliseconde.

Si vous don "t ajoutez la constante pour une date julienne, ça a l'airplus rose - à ce stade, la valeur actuelle n’est que d’environ 41330, il ya donc plus de "marge de manœuvre" dans la valeur de précision par rapport à l’heure du jour. En gros, plus les valeurs en virgule flottante sont grandes, plus la précision est mauvaise en termes absolus (l'écart entre les valeurs adjacentes devient plus important).