Rechenprobleme

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

phil217

Betreff: Rechenprobleme

BeitragSa, Jan 12, 2008 14:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Servus!
ich bastel grad so n bisschen rum und hänge an nem etwas seltsamen Problem

Code: [AUSKLAPPEN]
a = 169445
Print a
Print (600^2)*170
a = a+(600^2)*170
Print a
WaitKey
End


Wenn ich mir nen Taschenrechner nehm und das ausrechne kommt 61369445 raus, blitz basic gibt 61369444 zurück. Woran liegt das? Hängt das irgendwie damit zusammen dass er bei 600^2 ne Kommazahl draus macht?(mit 600*600 funktionierts, das nützt mir aber nichts da ichs in ner Formel mit 600^i brauch)
danke schonmal für eure Hilfe
Phil217

BladeRunner

Moderator

BeitragSa, Jan 12, 2008 14:12
Antworten mit Zitat
Benutzer-Profile anzeigen
die Rechengenauigkeit von floats ist da leider sehr begrenzt.
Du könntest allerdings zumindest einen Workaround machen:
Code: [AUSKLAPPEN]
Function hoch(base,Expo=2)
   wert = base
   For i = 1 To expo-1
      wert = wert * base
   Next
   Return wert
End Function

Print hoch(600,11)
WaitKey

Geht halt nur innerhalb der Grenzen eines integer, also bis ca. 2 Mrd.

EDIT: 600^11 ligt also grade ausserhalb, daher wird 0 zurückgegeben. 600^10 geht noch.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

phil217

BeitragSa, Jan 12, 2008 14:16
Antworten mit Zitat
Benutzer-Profile anzeigen
das heißt er kann zwar 170*(600^2) ausrechnen, aber dann nicht 169455 dazuzählen?... das is wirklich seltsam
jop auf die idee mit der for Schleife bin ich auch schon gekommen, wollt nur wissen warum es anders nich geht
warum wandelt er die Zahlen überhaupt in Floats um?
MfG
Phil217
 

ChristianK

BeitragSa, Jan 12, 2008 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du "600^2" in einen Integer umwandelst, kommt das richtige Ergebnis raus.

Code: [AUSKLAPPEN]
169445 + Int( 600^2 ) * 170

Oder du schreibst, wie BladeRunner schon gesagt hat, deine eigene Funktion. Allerdings geht das auch ein bisschen einfacher. Wink

Code: [AUSKLAPPEN]
Function Hoch( basis, exponent )
   Return Exp( exponent * Log( basis ) )
End Function
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT
 

phil217

BeitragSa, Jan 12, 2008 14:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Das probier ich gleich mal
Danke schonmal
Phil217

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group