Eric Lippert写了一篇关于DateTime的article。 Jon Skeet用
评论了他的文章只要每个人都知道,我就没有问题,DateTime有太多精度。精确,而不是准确
他的意思是什么?
接近DateTime精度问题与准确性问题有什么意义?
答案 0 :(得分:11)
他在该文章中使用的术语“准确度”错误。准确性差实际上意味着系统偏差,例如如果计算机的时钟关闭一分钟会发生什么。 Lippert的文章真正说明的是false precision。
换句话说,DateTime
结构非常精确,因为它能够表示仅100纳秒的差异。但是,您从DateTime.Now
获得的值仅精确到16毫秒内。但是你给出的数字仍然具有DateTime
能够表示的全部精度。这会产生一个问题,因为很容易假设DateTime.Now
返回的值带有DateTime
结构的完全精度,而不是花时间找出源{{1}的精度。得到它的价值。
DateTime.Now
,作为一个简单的数据结构,没有固有的准确性,所以谈论它并没有多大意义。 (一公斤的准确度是多少?)最好谈谈系统时钟的精确程度。 (例如,这个规模有多精确?)但是这可能因每台计算机而异,并且与.NET中的数据结构没有任何关系。
答案 1 :(得分:3)
当然,具有那么高精度的问题就出现了 很容易假设给定值与它一样准确 很精确。但这根本不值得保证!我可以代表我的身高 在双精度浮点数为1.799992352094米; 虽然精确到万亿分之一米,但它只是精确到约 百分之一米,因为我没有可以的设备 实际测量我的高度为万亿分之一米,甚至一个 千分之一米。这里有更精确而不是准确的方法。