在我的平台上,unsigned long long
是64位(8字节)。假设我有两个这样的变量:从两个(64位)整数中获取可靠的整数百分比
unsigned long long partialSize;
unsigned long long totalSize;
//somehow determine partialSize and totalSize
我怎样才能可靠地确定有多少百分比(四舍五入到附近的整数)partialSize
是totalSize
? (如果可能的话,如果我不必假设前者小于后者,那将是非常好的,但如果我真的必须做出这样的假设,那没问题,但我们当然可以假设两者都不是 - 否)。
例如,以下代码是否完全无懈可击?我担心的是,它包含某种舍入,铸造或转换错误,可能导致比率在某些情况下失控。
unsigned long long ratioPercentage
= (unsigned long long)(((double)partialSize)/((double)totalSize) * 100.0);
你是正确的,在非常极端的情况下,直截了当的方法可以“走出去”。这是因为有两个级别的舍入以及64位 - > 53位的精度损失。 – Mysticial 2011-12-31 18:57:41
@Mysticial。结果只需要最多7位的精度。我认为64→53根本不是问题。 – kennytm 2011-12-31 19:05:58
您可能感兴趣的两个链接:1)http://kanooth.com/numbers/ 2)http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic – paulsm4 2011-12-31 19:08:06