PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Multiplikation von Single-Zahlen



deuterius
24.04.2006, 23:45
Hallo zusammen

In einem bestimmten Programm versuche ich zwei etwas grössere Zahlen vom Typ Single zu multiplizieren. Das Ergebnis soll wieder einer Single-Variable zugeordnet werden. Leider gibt das stets NAN (heisst glaub ich "Not a Number", oder ?).

Ich hab jetzt zum Test folgendes Programm geschrieben:



$regfile = "M8def.dat"
$crystal = 4000000
Config Lcd = 20 * 4

Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4

dim a as single
dim b as single
dim c as single

a = 70000
b = 70000

c = a * b

cls
lcd "a = " ; a
lowerline
lcd "b = " ; b
thirdline
lcd "a * b = " ; c

end 'end program


Als Ergebnis erschint NAN.
Mit a=b=60000 funktioniert das gut, aber mit a=b=70000 oder grösser gibt es nur noch NAN.

Wo liegt das Problem?
Schliesslich ist 70000 * 70000 = 4.9e+9 und as liegt bei weitem noch im Wertebereich des Single-Typs.
(Zitat aus der Hilfe zu Bascom: "Singles are stored as signed 32 bit binary numbers. Ranging in value from 1.5 x 10^–45 to 3.4 x 10^38")

Probeweise habe ich mal noch mit den Einstellungen "HW Stack", "Soft Stack" und "Framesize" bei den "Compiler-Options" etwas herumgespielt. Das scheint aber keinen Einfluss zu haben.

Im Voraus besten Dank für jede Hilfe!

oe9vfj
25.04.2006, 14:32
Das Problem liegt nicht in der Multiplikation, sondern in der Routine, welche die SINGLE in den ASCII-String für die Ausgabe umwandelt.
Diese kann nur Zahlen bis zu einer bestimmten Größe darstellen. Darüber wird, obwohl ein gültiger Wert vorliegt, NAN ausgegeben.
Ich nehme an, dass in der nächsten Release eine verbesserte Routine implementiert wird.