Рассчитать процент 64 Int - PullRequest
1 голос
/ 27 июля 2010

У меня есть следующий код:

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);
}

Значение bintAfter после расчета равно 144115188075855872 вместо 144115188075855871 (см. В конце «2» вместо «1» ??).

При меньших значениях, таких как 0xFFFFFFFFFFFFF, я получаю правильный результат.
Как мне заставить его работать в 32-битном приложении? Что я должен принять во внимание?
Моя цель - сократить определенный процент от очень большого числа.

Я использую VC ++ 2008, Vista.

Ответы [ 2 ]

5 голосов
/ 27 июля 2010

double имеет 52-битную мантиссу, вы теряете точность, когда пытаетесь загрузить в нее 60-битное значение.

3 голосов
/ 27 июля 2010

Вычисления с плавающей точкой не гарантированно точны, и вы определили CUT_TYPE как double.

См. Этот ответ для получения дополнительной информации: Решение проблем с точностью в числах с плавающей запятой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...