/ / precisão de cálculo de microsegundos do Windows - .net, windows, datetime

precisão de cálculo do windows microseconds - .net, windows, datetime

Estou tentando converter DateTime para data juliana e revertê-lo no 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);
}

Quando eu testo essas duas funções como abaixo

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

a data juliana invertida sempre tem um valor ligeiramente diferente do valor original de DateTime em centenas de microssegundos.

Escrevi um código errado ou há imprecisão de microssegundos no sistema de tempo do Windows?

Respostas:

1 para resposta № 1

É um resultado natural do fato de que a data juliana é representada como double, que sempre terá precisão limitada. Por exemplo, o valor atual é de cerca de 2456348.78370906. Isso fornece 7 dígitos significativos antes do ponto decimal - e um double é preciso apenas para "cerca de" 15 casas decimais. Portanto, temos cerca de 8 dígitos decimais de precisão na parte decimal ... o que significa representar um dia.

Agora 1 dia / 100000000 = 0,000864 segundos. Então, eu só esperaria precisão abaixo de um milissegundo.

Se vocês não "t adicione a constante para uma data juliana, as coisas parecembastante otimista - nesse ponto, o valor atual é de apenas 41330, portanto, há mais "espaço" no valor da precisão em termos de hora do dia. Basicamente, quanto maior o valor do ponto flutuante, pior a precisão, em termos absolutos (a diferença entre valores adjacentes se torna maior).