0
votes

Comment soustraire des nombres de points flottants avec une haute précision

Fondamentalement, j'ai un numéro dire 5.112 Je veux soustraire le soustraire dans chaque itération de 0,001 comme 5.111, 5.110, 5.109, 5.108, etc.

Actuellement, je pense utiliser la méthode Split pour séparer le point de formulaire de numéro de compte, puis soustraire l'index 1 de 1 et rejoindre.

Je me demandais simplement s'il y a une autre meilleure façon de le faire.


2 commentaires

Pourquoi ne pas utiliser A pour boucle et soustraire réellement 0,001 ?


@Anwarvic parce que Point flottant Math est (probablement) cassé (moi paraphraser le titre de la question)


3 Réponses :


0
votes

Si vous deviez faire

x = 5.112
while True:
    x -= .001
    print(x)


2 commentaires

Sur mon système, 5.112 - 4 * .001 est 5.108000000000000005 . Utilisez décimal à la place. J'ai posté ma propre réponse .


Vous avez identifié le problème correctement, mais votre solution souffre du même problème ...



0
votes

Vous pouvez utiliser une compréhension numpy et la liste, comme:

import numpy
start = 5.112
[start-val for val in numpy.arange(0, 0.1, 0.001)]


1 commentaires

Avez-vous essayé votre code? La sortie n'est pas correcte.



2
votes

Les flotteurs sont imprécis (voir Réponse de Frank et Est-ce que le point flottant est cassé? ).

Utilisez décimal à la place. xxx

sortie: xxx


0 commentaires