精确损失有多大转换为长到两倍?

10 c# double casting long-integer

我已经在stackoverflow和C#文档中的不同帖子中读到,转换long(或表示数字的任何其他数据类型)double失去精度.由于浮点数的表示,这是非常明显的.

我的问题是,如果我将更大的数字转换为精度,那么精度会有多大double?我是否必须预期差异大于+/- X?

我想知道这个的原因是,我必须处理一个连续的计数器long.该值由我的应用程序读取string,需要进行转换,并且必须除以例如10或其他一些小数字,然后进一步处理.

decimal更适合这项任务吗?

das*_*ght 10

转换long(或表示数字的任何其他数据类型)double失去精度.由于浮点数的表示,这是非常明显的.

这不像看起来那么明显,因为精度损失取决于的价值long.对于-2 52和2 52之间的值,根本没有精度损失.

如果我将一个更大的数字转换为双倍,那么精度的损失有多大?我是否必须预期差异大于+/- X.

对于幅度大于2 52的数字,您将遇到一些精度损失,具体取决于您的52位限制以上的数量.如果您的绝对值long适合于58位,则精度损失的幅度将为58-52 = 6位,或+/- 64.

decimal更适合这项任务吗?

decimal具有不同的表示double,它使用不同的基础.由于您计划将您的数字除以"小数字",因此不同的表示形式会给您不同的分歧错误.具体来说,double将更好地处理除以2(2,4,8,16等)的幂的除法,因为这种除法可以通过从指数中减去而不触及尾数来实现.类似地,decimal当除以十,百等时,大s将不会损失有效数字.