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.