在我的平台上,
我该如何可靠地确定
例如,以下代码是否完全牢固?我的担忧是它包含了某种四舍五入、转换或转化错误,这可能在某些情况下导致比率失衡。
unsigned long long
是64位(8字节)。假设我有两个这样的变量: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 );
int((100 * 2751734980444983885.0) / 10006309019799941400.0 + 0.5)
给出的结果是28。不过我同意,在极少数情况下,64位结果可能会得到0.49999...,而53位结果则会得到0.5000... - kennytm850536266682995018 / 3335436339933313800
即使加上+0.5
,这个例子也失败了。正确答案是25%
,而正确的公式给出的是26%
。但是,我们是达成了一致意见的。 - Mysticial