2011-06-29 3 views
3

En train de tenter de diviser un élément long non signé par une valeur statique.Division de unsigned long long

La longueur longue non signée contient le nombre de microsecondes nécessaires à l'opération. Je veux prendre cette valeur et la convertir en secondes.

Voici le code snippit:

double udDiffTime = ullHighResDiffTime/(unsigned long long)1000000; 

Dans un cas avec mon débogueur, je peux voir ullHighResDiffTime = 639. Par conséquent, udDiffTime = 0,000639. Cependant, je reçois udDiffTime = 0.

Je suis sûr que je fais une erreur quelque part. J'ai essayé d'utiliser 1000000LL au lieu de le lancer en utilisant (unsigned long long), mais il n'y a pas de différence.

Répondre

7

que vous faites une division entière, donc si le résultat est 0,000639 il tronqués à 0.

Si vous voulez un résultat à virgule flottante, vous devrez utiliser au moins un point flottant opérande. Essayez par exemple de changer (unsigned long long) 1000000 en 1000000.0. Une longueur longue non signée peut aller jusqu'à 18 446 744 073 709 551 615. Un double peut atteindre jusqu'à 1,7E308 (c'est-à-dire, un avec 308 zéros). Le hic, c'est que plus la valeur est élevée, moins elle aura de précision, alors vous devez vous demander si les grandes valeurs doivent être aussi précises, ou si l'importance de ce nombre est plus importante.

1

Modifier à

double udDiffTime = ullHighResDiffTime/1000000.0; 

pour obtenir le résultat que vous attendez.

0

unsigned long long est un type intégral, donc la division intégrale est utilisée. Seulement après la division est la valeur convertie en double. Essayez de diviser par 1000000.0.

0

Si le type de ullHighResDiffTime n'est pas signé longtemps, vous divisez un entier par un entier qui n'invoque pas l'arithmétique en virgule flottante.

Utiliser ce lieu:

double udDiffTime = ullHighResDiffTime/1000000.0;

0

divisant long long (ou tout nombre entier) non signé avec les mêmes résultats de type dans le même type. Ensuite, vous convertissez la valeur en double, mais le résultat est déjà zéro.

Divisez-le par un double.

Questions connexes