Rechenfehler bei Quadratfunktion

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

HyDr0x

Betreff: Rechenfehler bei Quadratfunktion

BeitragFr, Nov 30, 2007 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Anscheinend kann Blitzbasic Zahlen wie z.B. 36789 nicht quadrieren, zumindest nicht richtig. 30000 quadriert BB fehlerfrei.
Da man Strings auch nicht quadrieren kann weiß ich nicht genau wie ich nun zu einem richtigen Ergebnis komme. Mein Versuch lautet wie folgt:

z.B. 23^2 = 20^2+3^2+2*2*3*10=529

Scheint für mich eine passende Lösung des Problems zu sein. Da sie die Formel aber nach jeder neuen Stelle zu ändern scheint Frage ich euch ob hier jemand ist der mir die genaue Formel geben kann für n- Stellen.

BladeRunner

Moderator

BeitragFr, Nov 30, 2007 20:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Quadrieren?

x*x

23^2 = 23*23
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
 

Dreamora

BeitragFr, Nov 30, 2007 20:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hinzu kommt das du mit deinem 36789 bei 1,3 Mia ankommst.
2,1XXX ist das maximum, was überhaupt dargestellt werden kann mit Int.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

BladeRunner

Moderator

BeitragFr, Nov 30, 2007 21:00
Antworten mit Zitat
Benutzer-Profile anzeigen
also: 36789^2 ergibt: 1.35343e009
36789*36789 ergibt 1353430521

Beide Ergebnisse sind korrekt, der zweite 100%ig, der erste innerhalb der Genauigkeit von 32-Bit-Floats, die nunmal nur 6 Nachkommastellen haben.
^ verwendet augenscheinlich Floats. Wenn Du x*x nimmst kannst du also genauere Ergebnisse erhalten.

EDIT: bis ca. 46200² ist mit int zu arbeiten, darüber gehen nur noch die floats.
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
 

Dreamora

BeitragFr, Nov 30, 2007 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist anzumerken das Floats bei grossen als auch sehr kleinen Zahlen sehr ungenau sind. Das sollte man immer im Hinterkopf behalten.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

HyDr0x

BeitragFr, Nov 30, 2007 21:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok thx für eure Hilfe. Hatte es mit x*x gar nicht erst versucht da ich dachte es wäre ein interner Fehler oder so ... Allerdings muss ich letztendlich mit Werten über 46200 arbeiten somit sind die Ergebnisse dann ungenau. Abhilfe kann da nur noch die oben genannte Formel schaffen, da ich dann z.B. 3000000000^2 auf 3^2 kürzen und dann als String wieder erweitern und mit den anderen Werten adieren kann. Also würde ich mich weiterhin freuen wenn mir jmd. die Formel nenne könnte.
 

Dreamora

BeitragFr, Nov 30, 2007 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
über 46200 ist es nicht ungenau sondern führt direkt zu einem fehler.
Da musst du ins Codearchiv und die String Rechenfunktion nehmen, das ist die einzige noch wirklich praktikable Lösung für den Fall.

Denn Primfaktorzerlegung ist mit Blitz recht unrealistisch, dafür ist der Mathebackend von Blitz (ausser bei BM) einfach zu langsam.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

HyDr0x

BeitragFr, Nov 30, 2007 21:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
Denn Primfaktorzerlegung ist mit Blitz recht unrealistisch, dafür ist der Mathebackend von Blitz (ausser bei BM) einfach zu langsam.


Schade, genau das wollt ich mal ausprobieren ... Dann kann ich mir die Mühe ja sparen. Trotzdem nochmal thx für die Infos !

Triton

BeitragSo, Dez 02, 2007 17:57
Antworten mit Zitat
Benutzer-Profile anzeigen
@dreamora: ich weiß zwar nicht, wie du vom quadrieren zur primfaktorzerlegung kommst, aber letztgenannte ist mit bb durchaus schnell lösbar. Die allermeisten
Zahlen haben viele kleine Faktoren, da ist es eine Sache von 1 ms.
Bei Zahlen die nur genau 2,3 oder 4 Teiler haben (Primzahlen, Primzahlen² und 2 Primzahlen multipliziert) ist es schon langsamer, wenn man das gleiche Verfahren
anwendet wie bei Zahlen mit vielen Faktoren.

However, für beide Varianten habe ich im Codearchiv unter Primfaktorzerlegung mal was gepostet.

Abgesehen davon ist es natürlich richtig, dass man über 2^31 in absoluter Genauigkeit bei BB nur mit Stringrechenfunktionen weiterkommt.
Rallimen hat da ja mal was schönes vorgelegt.

Ich selbst schreibe/schrieb ja auch an einer Alternative, die aber aus diversen
privaten Gründen noch vor der Veröffentlichung steht.
Coding: silizium-net.de | Portfolio: Triton.ch.vu

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group