wurzel ziehen aus 256 stelliger zahl

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

TOONY

Betreff: wurzel ziehen aus 256 stelliger zahl

BeitragFr, März 25, 2005 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe ein problem,
das warscheinlich nur experten lösen können:

ich habe eine 256 stellige zahl im nachkommabereich:
(gespeichert als string)


B$ = "0.46575748756345634573465872369460235......"

Ich bräuchte die wurzel dieser zahl..
mit dem SQR befehl komme ich da nicht weiter!

Wer kann mir einen lösungsweg zeigen,
oder wer hat schon eine lösung?

Bin für jede hilfe sehr dankbar!
 

Ensign Joe

BeitragFr, März 25, 2005 21:54
Antworten mit Zitat
Benutzer-Profile anzeigen
sqr kann nur integers/doubles

nimm einfach wert# also # kein % bzw $ dahinter Wink
viel spa0

(also b#)
Ich habe jetzt eine Pommesbude aufgemacht am Münchner Hauptbahnhof.
Und da ich Herbert Görgens heiße, heißt diese Pommesbude
Herbert's Pommesbude Smile

BladeRunner

Moderator

BeitragFr, März 25, 2005 21:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Ensign: er will eine 256stellige(!) Zahl bearbeiten. Da hilft ihm eine float mit 6 Stellen Genauigkeit recht wenig....
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
 

Ensign Joe

BeitragFr, März 25, 2005 22:00
Antworten mit Zitat
Benutzer-Profile anzeigen
ja und, 6 stellen sind 6 stellen, besser als gar keine (normaler integer)

EDIT: achso, das ist 0,... toll, was bringt dir dasß
Ich habe jetzt eine Pommesbude aufgemacht am Münchner Hauptbahnhof.
Und da ich Herbert Görgens heiße, heißt diese Pommesbude
Herbert's Pommesbude Smile

BladeRunner

Moderator

BeitragFr, März 25, 2005 22:02
Antworten mit Zitat
Benutzer-Profile anzeigen
hargott: verstehst du es nicht?
er will es aber ganz genau und sucht daher eine Alternative Berechnung.
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

Spikespine

BeitragFr, März 25, 2005 22:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit Sqr kommt er bei einer 256-Stelligen zahl glaub nicht sehr weit. Da muss das wohl schon ein String sein...
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax

BladeRunner

Moderator

BeitragFr, März 25, 2005 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Mein Vorschlag wäre: schreib dir eine Funktion, welche einen angegebenen String auf x Stellen miteinander multipliziert. (eine Stringmultiplikation wurde erst kürzlich im Codearchiv gepostet).

Nun müsstest du rekursiv vorgehen:
ist zB .2 *.2 < deiner Wurzel, aber .3*.3 > deiner Wurzel (was im konkreten Falle nit stimmt) gehst du zur nächsten Stelle mit dem niederen Ergebnis weiter: also .20*.20 bis .29 *.29. hier verfährst du wieder genauso.
Und das solange bis alle 256 Stellen berechnet sind.

Allerdings zeitaufwendig und es kann je nach Anzahl der Berechnungsschritte zu einem Stack owerflow kommen (aber 2560 rekursive aufrufe sollte der Rechner eigentlich vertragen).

EDIT:
Zitat:
EDIT: achso, das ist 0,... toll, was bringt dir dasß


Das kann dir ja egal sein wofür er es braucht, oder ?
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

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragFr, März 25, 2005 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Diese Function Square_Root$ (Wert1$) gehört auch zu den String Rechnen Functionen

und könnte dir die Wurzel bis ins unendliche ziehen!

wenn da nicht die Abbruch Bedingung drinn wäre!
Bis auf diese Function habe ich alle anderen auch für Kommazahlen
Demnach müßte diese noch umgeschrieben werden!

Normal reicht es aus diese auf Komma umzustellen, da es zum berechnen nur integerfunctionen benötigt!

Wenn ich Zeit und Lust habe schreibe ich die noch um!

Zitat:
ich habe eine 256 stellige zahl im nachkommabereich:


Wie..... nur eine Shocked
[BB2D | BB3D | BB+]
 

TOONY

BeitragSa, März 26, 2005 0:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Square_Root$ funktion hatte ich mir schon angeschaut,
ist sehr nützlich Very Happy nur eben nicht für nachkommazahlen.

Ich hatte versucht die Funktion unzuschreiben,
aber sich in einen fremden Code einzuarbeiten
ist immer sehr schwer.

Ich würde mich aufjeden fall freuen, wenns klappt.

Ich habe üprigens nicht nur eine Zahl, die ich berechnen will,
sondern mehrere 100 aus denen sich dann weitere Zahlen ergeben!


Zitat:

Nun müsstest du rekursiv vorgehen:
ist zB .2 *.2 < deiner Wurzel, aber .3*.3 > deiner Wurzel (was im konkreten Falle nit stimmt) gehst du zur nächsten Stelle mit dem niederen Ergebnis weiter: also .20*.20 bis .29 *.29. hier verfährst du wieder genauso.
Und das solange bis alle 256 Stellen berechnet sind.


bei einer 256 großen nachkomma zahl ist das nicht möglich,
weil:

- "sqr(9)" nicht "sqr(0.9)*10" ist
- "sqr(0.423423)" kann nicht in "sqr(0.423)" und sqr(423) aufgeteilt werden.

wäre die zahl nicht im nachkommabereich,
wäre dies kein problem!!

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, März 26, 2005 1:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Ich hatte versucht die Funktion unzuschreiben,
aber sich in einen fremden Code einzuarbeiten
ist immer sehr schwer.

Da muß ich vollkommen recht geben!
Und gerade diese eine Function hats in sich!

Ich schreib dir die Neue
BlitzBasic: [AUSKLAPPEN]
Square_Root_Plus$

aber erst morgen Früh!
Jetzt klappt das sowieso nicht mehr ....(AUGENFALLZU)

Wieviel Nachkommastellen werden denn benötigt?
Obwohl..... ich kann auch das mit in die Function einbauen!
Oder lieber ein Zeitlimit dann kannste die Speed vorgeben! Smile
[BB2D | BB3D | BB+]

BladeRunner

Moderator

BeitragSa, März 26, 2005 6:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
bei einer 256 großen nachkomma zahl ist das nicht möglich,
weil:

- "sqr(9)" nicht "sqr(0.9)*10" ist
- "sqr(0.423423)" kann nicht in "sqr(0.423)" und sqr(423) aufgeteilt werden.

Da hast du mich wohl etwas falsch verstanden Wink
Ich will nicht die Wurzeln in verschiedenen potenzen miteinander multiplizieren, sondern innerhalb einer Dezimalstelle jeweils das Ergebnis suchen welches am nächsten an der Lösung liegt. dann erst iterieren und somit die Lösung verfeinern.
Ist ein Ansatz der auch bei der Berechnung von Pi einwandfrei funktioniert, man berechnet die Fläche über und unter der Kurve und verfeinert den berechneten Abschnitt immer weiter.
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

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, März 26, 2005 9:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Habs fertig, die eine Function
BlitzBasic: [AUSKLAPPEN]
Function Square_Root_KOMMA$ (Wert1$,Nachkomma% = 50)
Nachkomma% = Nachkomma% - 1
If Instr(Wert1$,\".\") = 0 Then Wert1$=Wert1$+\".\"
;Vorm Komma und nach Komma Stellen durch 2 teilbar
Dummy1$ = Left (Wert1$,Instr (Wert1$,\".\") - 1)
If Len (Dummy1$) Mod 2 Then Dummy1$ = \"0\" + Dummy1$
Dummy2$ = Mid (Wert1$,Instr (Wert1$,\".\") + 1)
If Len (Dummy2$) Mod 2 Then Dummy2$ = Dummy2$ + \"0\"
Wert1$ = Dummy1$ + \".\" + Dummy2$

Repeat

.Start
If Len (Wert1) Then
VonOb$ = Left (wert1,2)
Else
VonOb$ = \"00\"
End If
If Instr (VonOb$,\".\") Then
Komma = Len (erg$)
wert1 = Mid (wert1,2)
Goto Start
End If
wert1 = Mid (wert1,3)
If Abzieh$ = \"\" Then
Abzieh$ = \"1\"
Else
Abzieh$ = Addieren$ (erg$,erg$) + \"1\"
End If
ReWert$ = ReWert$ + VonOb
While Left (ReWert$,1) = \"0\" : Rewert = Mid (ReWert$,2) : Wend
If Len (Rewert) = 0 Then Rewert = \"0\"
For t = 0 To 10
If Dividieren_Vergleichen (ReWert$,Abzieh$) <> 2 Then
ReWert$ = Subtrahieren$ (ReWert$,Abzieh$)
Abzieh = Addieren$ (Abzieh,2)
Else
erg = erg + T
Exit
End If
Next
If Len (erg) - Komma > Nachkomma% Then Exit
Forever
If komma Then
returnwert$ = Left (Erg$,Komma) + \".\" + Mid (Erg$,Komma + 1)
Return returnwert$
Else
Return erg
End If
End Function

zum Teil werden die anderen Functionen benötigt!
die hier stehen
https://www.blitzforum.de/viewtopic.php?t=9725

bitte noch mit dem Wissenschaftlichen Windows Taschenrechner überprüfen!

hier der standart Test,
BlitzBasic: [AUSKLAPPEN]
Print Square_Root_KOMMA$ (0.0289,10)
Print Sqr(0.0289)
;
Print Square_Root_KOMMA$ (\"0.00456\",15)
Print Sqr(0.00456)
;
Print Square_Root_KOMMA$(1234560 )
Print Sqr(1234560)
WaitKey
[BB2D | BB3D | BB+]
 

TOONY

BeitragSa, März 26, 2005 13:15
Antworten mit Zitat
Benutzer-Profile anzeigen
1000 fachen DANK!!!!

Die Funktion werde ich heute nachmittag in mein Programm einbauen!!
Ich denke schon dass die funkion funktioniert.

DANKE!!!!!

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, März 26, 2005 21:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Um was für eine Art Proggi handelt es sich denn? ..neugierigfrag!
[BB2D | BB3D | BB+]

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group