Float benutzt 4 byte, Long benutzt 4 byte.
Float benutzt ein paar Bit für den Exponenten, Long nicht, das ist Ganzzahl.
die Information ist begrenzt auf 2^32 verschiedene zustände.
mehr kann man nicht speichern.
im Bereich von 0 bis 2147483647 ist Long absolut genau.
aber Float kann 2147483647.0 schon nicht mehr genau darstellen,
weil ein paar Bit für den Exponenten benutzt werden.
demo:
Code: Alles auswählen
a.f = 2147483600
b.l = 2147483600
Debug a
Debug b
a+1
b+1
Debug a
Debug b
a+1
b+1
Debug a
Debug bnicht nur, dass Float die Zahl beim ersten aufruf ungenau wiedergibt,
es ist nicht fähig, eine kleine addition zu verarbeiten.
das liegt nicht an PB, das liegt an der Natur der Fließkommazahlen.
der selbe Algorithmus wird dir in C++ oder Java oder wo auch immer
das selbe Ergebnis liefern, wenn du einen 32bit-variablen-typ wählst.
mit 64bit (Double) kannst du das Problem verlagern, aber nicht eliminieren.