Étant donné que 8-byte doubles can represent all 4-byte ints precisely, je me demande si diviser un double A stockant un int, par un double B stockant un int (tel que l'entier B divise A) donne toujours le double exact correspondant à l'entier qui est leur quotient? Donc, si B et C sont des nombres entiers, et B * C s'intègre dans un int 32 bits, est-il garanti queDivision précise des doubles représentant exactement les entiers (quand ils sont divisibles)
int B,C = whatever s.t. B*C does not overflow 32-bit int
double(B*C)/double(C) == double((B*C)/C) ?
Est-ce que la garantie norme IEEE754 cela?
Dans mes tests, il semble fonctionner pour tous les exemples que j'ai essayés. En Python:
>>> (321312321.0*3434343.0)/321312321.0 == 3434343.0
True
La raison de demander que Matlab rend difficile de travailler avec ints, donc je souvent il suffit d'utiliser le double par défaut pour le calcul des nombres entiers. Et quand je sais que les entiers sont exactement divisibles, et si je sais que la réponse à la présente question est oui, alors je pourrais éviter de faire des moulages à ints, idivide(..)
etc., ce qui est moins lisible.
http://stackoverflow.com/q/3793838/2586922 –