Variation bei der Anzahl an Nachkommastellen
Verfasst: Mittwoch 6. Juli 2022, 20:50
Hi Leute,
ich arbeite zur Zeit mit kleinen 'float' Zahlen und bin auf ein Problem gestoßen, welches ich bisher nicht verstehen konnte.
Ich habe folgende Funktion geschrieben:
Wenn ich nun diese Funktion mit den folgenden Werten ausführe:
Erhalte ich das folgende dictionary:
Ich verstehe nicht, weshalb mir bei den Schlüsseln (1, 2, 1) und (2, 1, 1) float-Zahlen (wissenschaftliche Notation) mit 16 Nachkommastellen angezeigt werden, während bei dem Schlüssel (1, 1, 2) eine float-Zahl (wissenschaftliche Notation) mit 15 Nachkommastellen angezeigt wird. Der Wert sollte bei allen drei Zahlen der gleiche sein, wie dies im Gegensatz dazu bei den drei Werten (1, 2, 2), (2, 1, 2) und (2, 2, 1) der Fall ist.
Erhöhe ich die Iteration auf z.B. [ nx, ny, nz = 4 ] zeigt sich das gleiche Problem.
Die Mehrheit aller "gleichen Werte" (Entartung) werden mit der gleichen Anzahl an Nachkommastellen angegeben. Nur bei vereinzelten Werten gibt es eine Abweichung der angegebenen Nachkommastellen.
Woran liegt es, dass nur in vereinzelten Fällen (ohne eine Systematik erkennen zu können) eine abweichende Anzahl an Nachkommastellen berechnet werden?
Mir ist bewusst, dass float-Zahlen nicht unendlich präzise gespeichert werden können und man in diesen Fällen die Möglichkeit hat, auf das Modul "decimal" zurück zu greifen. Aber ich hätte bei einer ungenauen Speicherung von float-Zahlen schlussendlich unterschiedliche Zahlenwerte erwartet. Aber in dem oben beschriebenen Fall unterscheiden sich die Werte nur in der Anzahl der Nachkommastellen. Und nun interessiere ich mich dafür, warum dies so ist.
Ich hoffe, dass ich nicht das Offensichtliche übersehen habe.
ich arbeite zur Zeit mit kleinen 'float' Zahlen und bin auf ein Problem gestoßen, welches ich bisher nicht verstehen konnte.
Ich habe folgende Funktion geschrieben:
Code: Alles auswählen
from scipy import constants
def calc_multi_eigenvalues(n_x, n_y, n_z, length_a, length_b, length_c, mass):
"""
Calculate multiple eigenvalues of a particle in a three-dimensional box
Parameters
----------
n_x, n_y, n_z : 'int'
principal quantum numbers, with n = 1,2,3,...
length_x, length_y, lenght_z : 'float'
length of the box in [meter]
mass : 'float'
mass of the particle in [kilogram]
Returns
-------
calc_multi_eigenvalues : 'dict' ['list', 'float']
multiple eigenvalues of the particle in [joule]
"""
eigenvalues = {}
for i in range (1, n_x+1):
for j in range(1, n_y+1):
for k in range(1, n_z+1):
eigenvalues[i, j, k] = ((constants.h**2 / (8 * mass))
* ((i/length_a)**2 + (j/length_b)**2 + (k/length_c)**2))
return eigenvalues
Code: Alles auswählen
a = 10e-10
b = 10e-10
c = 10e-10
nx = 2
ny = 2
nz = 2
m = constants.m_e
calc_multi_eigenvalues(nx, ny, nz, a, b, c, m)
Code: Alles auswählen
{(1, 1, 1): 1.8074002206712706e-19,
(1, 1, 2): 3.614800441342541e-19,
(1, 2, 1): 3.6148004413425417e-19,
(1, 2, 2): 5.422200662013812e-19,
(2, 1, 1): 3.6148004413425417e-19,
(2, 1, 2): 5.422200662013812e-19,
(2, 2, 1): 5.422200662013812e-19,
(2, 2, 2): 7.229600882685082e-19}
Erhöhe ich die Iteration auf z.B. [ nx, ny, nz = 4 ] zeigt sich das gleiche Problem.
Die Mehrheit aller "gleichen Werte" (Entartung) werden mit der gleichen Anzahl an Nachkommastellen angegeben. Nur bei vereinzelten Werten gibt es eine Abweichung der angegebenen Nachkommastellen.
Woran liegt es, dass nur in vereinzelten Fällen (ohne eine Systematik erkennen zu können) eine abweichende Anzahl an Nachkommastellen berechnet werden?
Mir ist bewusst, dass float-Zahlen nicht unendlich präzise gespeichert werden können und man in diesen Fällen die Möglichkeit hat, auf das Modul "decimal" zurück zu greifen. Aber ich hätte bei einer ungenauen Speicherung von float-Zahlen schlussendlich unterschiedliche Zahlenwerte erwartet. Aber in dem oben beschriebenen Fall unterscheiden sich die Werte nur in der Anzahl der Nachkommastellen. Und nun interessiere ich mich dafür, warum dies so ist.
Ich hoffe, dass ich nicht das Offensichtliche übersehen habe.