comment définir numpy à virgule flottante de précision?
J'ai juste calculé le même nombre de deux manières, mais dans numpy, il a fait une erreur
[[ 0.910221324013388510820732335560023784637451171875]]
[[-0.9102213240133882887761274105287156999111175537109375]]
ce nombre est le même jusqu'à e^(-15), mais en diffère par la suite. Comment puis-je traiter cette erreur?
Est-il possible de limiter à virgule flottante de précision?
Depuis que j'ai calculer l'exponentielle de l'utilisation de ces chiffres, même peu différences de résultat dans les erreurs frustrantes...
pouvez-vous poster le code?
Quelle est la dtype de votre tableau? C'est fou le nombre de chiffres de la production.
float64. depuis le nombre d'impression n'indiquent aucune différence par python impression d'une fonction, j'ai ajouté de la np.set_printoptions(précision=70)
Quelle est la dtype de votre tableau? C'est fou le nombre de chiffres de la production.
float64. depuis le nombre d'impression n'indiquent aucune différence par python impression d'une fonction, j'ai ajouté de la np.set_printoptions(précision=70)
OriginalL'auteur user42298 | 2014-08-07
Vous devez vous connecter pour publier un commentaire.
S'en faire à propos de la précision du résultat, ou au sujet d'obtenir exactement les mêmes chiffres au retour de vos deux calculs?
Si vous voulez juste les mêmes chiffres, on pourrait utiliser
np.autour de()
pour arrondir les résultats à un nombre de décimales. Cependant, en faisant cela, vous aurez seulement de réduire la précision du résultat.Si vous voulez calculer le résultat plus précisément, vous pouvez essayer d'utiliser le
np.longdouble
type de votre tableau d'entrée, qui, en fonction de votre architecture et du compilateur, pourraient vous donner un 80 ou 128 bits à virgule flottante représentation, plutôt que le standard 64 bitsnp.double
*.Vous pouvez comparer le nombre approximatif de décimales de précision à l'aide de
np.finfo
:Noter que pas toutes les fonctions de numpy permettra de soutenir à long double - certains bas-moulé à double.
*Cependant, certains compilateurs (tel que Microsoft Visual C++) traitera toujours
long double
comme synonyme dedouble
, auquel cas il n'y aurait pas de différence de précision entrenp.longdouble
etnp.double
.numpy.longdouble
fait référence quel que soit le type de votre compilateur C appelslong double
”, comme indiqué dans votre lien, puis, malheureusement, avec certains compilateurs C, il n'est pas plus précis quedouble
(Visual Studio par exemple). Pourtant, +1 pour répondre à la question.Wow, je ne savais pas que Visual C++ a été que limite...
Je ne sais pas du tout mainstream de plates-formes où vous obtenez un cryptage de 128 bits à virgule flottante de type. OS X rapports
np.longdouble
commenumpy.float128
, mais c'est le mensonge - c'est le même vieux de 80 bits x87 précision étendue type de collier avec 6 octets zéro. (De la même façon, Linux 32 bits souvent des rapports du même type quenumpy.float96
.)OriginalL'auteur ali_m
Normal numpy utilisation, les numéros sont en double.
Ce qui signifie que la précision sera de moins de 16 chiffres.
Voici un sujet résolu que contient la même problématique ...
Si vous avez besoin pour augmenter la précision, vous pouvez utiliser calcul symbolique ....
La bibliothèque mpmath ... est un endroit calme bon.
L'avantage est que vous pouvez utiliser sans limite de précision.
Cependant, les calculs sont plus lent que ce que numpy peut faire.
Voici un exemple:
Vous ne pouvez pas faire mieux avec numpy.
Vous pouvez calculer les exponentielles avec une meilleure précision.
OriginalL'auteur Taha
Vous pouvez utiliser
math.ceil
.Par exemple, vous avez:
Cela renvoie
8.8697059688
, j'.e la valeur jusqu'à 10 décimales. Modifier la1e10
à1e15
ou toute autre valeur en conséquenceDans votre cas, ce sera:
Cela vous donnera
a = 0.910221324013389
OriginalL'auteur ThePredator