计算64 int的百分比

时间:2010-07-26 23:26:40

标签: c++ c math

我有以下代码:

typedef __int64 BIG_INT;
typedef double CUT_TYPE;

#define CUT_IT(amount, percent) (amount * percent)

void main()
{
    CUT_TYPE cut_percent = 1;

    BIG_INT bintOriginal = 0x1FFFFFFFFFFFFFF;
    BIG_INT bintAfter = CUT_IT(bintOriginal, cut_percent);
}

bint计算后的值是144115188075855872而不是144115188075855871(最后见“2”,而不是“1”??)。

在较小的值(如0xFFFFFFFFFFFFF)上,我得到了正确的结果 如何在32位应用程序上运行它?我需要考虑什么?
我的目标是削减一个非常大的数字的一定比例。

我使用VC ++ 2008,Vista。

2 个答案:

答案 0 :(得分:5)

double有一个52位的尾数,当你尝试将60+位值加载到其中时,你会失去精确度。

答案 1 :(得分:3)

浮点计算不能保证完全准确,您已将CUT_TYPE定义为double

有关详细信息,请参阅此答案:Dealing with accuracy problems in floating-point numbers