I ont le code suivant:Calculer le pourcentage de 64 int
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);
}
la valeur de bintAfter après le calcul est 144115188075855872 au lieu d'144115188075855871 (voir le "2" à la fin, au lieu de "1" ??).
Sur des valeurs plus petites telles que 0xFFFFFFFFFFFFF, j'obtiens le résultat correct.
Comment puis-je le faire fonctionner, sur l'application 32 bits? Qu'est-ce que je dois prendre en compte?
Mon but est de couper un certain pourcentage d'un très grand nombre.
J'utilise VC++ 2008, Vista.
Est-ce que "cut_percent" va toujours être n/100 pour un entier n, ou est ce que "cut_percent" peut être un double arbitraire? –
@Peter: double arbitraire c'est. L'exemple de code utilise 100% juste pour souligner le fait que la valeur est fausse, peu importe comment vous le regardez. – Poni