Math DLL-hilfe
Math DLL-hilfe
Ich bastle gerade eine Math DLL die so viele Stellen wie man will ausrechnen kann. Ich bin noch nicht weit und frag mal ob sie auch Sinus und Cosinus rechnen können soll?
Wenn ja wie sieht denn so eine Funktion aus wenn man sie zB. im Kopf rechnen will aus?
Die Fage anders gestellt: Aus welchen Grundrechnungsarten bestehen sie?
PS. bin erst in der Vierten im Gymnasium und weiß was/wie man damit (etwas) ausrechnen kann von meinem Vater.
Wenn ja wie sieht denn so eine Funktion aus wenn man sie zB. im Kopf rechnen will aus?
Die Fage anders gestellt: Aus welchen Grundrechnungsarten bestehen sie?
PS. bin erst in der Vierten im Gymnasium und weiß was/wie man damit (etwas) ausrechnen kann von meinem Vater.
- Tafkadasom2k5
- Beiträge: 1578
- Registriert: 13.08.2005 14:31
- Kontaktdaten:
Kurze Zwischenfrage:
Gibt es nicht schon eine Lib, die unendlich große Zahlen mit Nachkomme ausrechnen kann?
AFAIK arbeitet diese mit Strings (weshalb man sie auch von BigNum-Lib auf BigShit-Lib taufen könnte), aber sie funktioniert allemal.
(BTW: Arbeitet PB auf Windows-Basis eigentich mit OLE-Strings? Oder normale Vor-0-Terminierte ASCIIZs?)
Gr33tz
Tafkadasom2k5
Gibt es nicht schon eine Lib, die unendlich große Zahlen mit Nachkomme ausrechnen kann?
AFAIK arbeitet diese mit Strings (weshalb man sie auch von BigNum-Lib auf BigShit-Lib taufen könnte), aber sie funktioniert allemal.
(BTW: Arbeitet PB auf Windows-Basis eigentich mit OLE-Strings? Oder normale Vor-0-Terminierte ASCIIZs?)
Gr33tz
Tafkadasom2k5
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Ja, gibt es:Tafkadasom2k5 hat geschrieben:Kurze Zwischenfrage:
Gibt es nicht schon eine Lib, die unendlich große Zahlen mit Nachkomme ausrechnen kann?
http://gmplib.org/ (die schnellste Lib wo gibt, und dazu noch GNU, ole!)
Limitiert ist die Grösse der Beträge durch den Hauptspeicher, der der Sache zur Verfügung gestellt wird.
Warum man so etwas nochmal schreiben sollte:
In diesem Fall:
Verinnerlichung der Formeln
Verinnerlichung von Algorithmen
Weiterbildung rockt!
-
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
BigNum heißt die Lib. Man kanns auch komplizierter machen indem man zuerst eine fremde statische lib importiert.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
@PBprogger
vierte klasse gymnasium... kann ich jetzt nich so viel mit anfangen,
in DE rechnen wir ab einschulung.. wieviele jahre volksschule habt ihr denn vorm gymi?
wie auch immer...
schau dir mal den wiki-artikel Einheitskreis an.
da müsstest du schon sehr viel info über sin und cos rausbekommen.
die grafik find ich echt klasse:

@Vallan
ich meine, man kann den sinus auch einfacher ausrechnen.
diese kettenformel mit x-mal fakultät im nenner ist doch wahnsinn.
vierte klasse gymnasium... kann ich jetzt nich so viel mit anfangen,
in DE rechnen wir ab einschulung.. wieviele jahre volksschule habt ihr denn vorm gymi?
wie auch immer...
schau dir mal den wiki-artikel Einheitskreis an.
da müsstest du schon sehr viel info über sin und cos rausbekommen.
die grafik find ich echt klasse:

@Vallan
ich meine, man kann den sinus auch einfacher ausrechnen.
diese kettenformel mit x-mal fakultät im nenner ist doch wahnsinn.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- Froggerprogger
- Badmin
- Beiträge: 855
- Registriert: 08.09.2004 20:02
Schau mal hier nach mySin und myCos (8ter Beitrag).
http://www.purebasic.fr/german/viewtopic.php?t=5550
Statt floats in der Prozedur kannst du auch andere Datentypen (z.B. big decimal) nehmen, mit denen man Addieren/Subtrahieren/Multiplizieren/Dividieren kann, um mehr Stellen zu berechnen.
http://www.purebasic.fr/german/viewtopic.php?t=5550
Statt floats in der Prozedur kannst du auch andere Datentypen (z.B. big decimal) nehmen, mit denen man Addieren/Subtrahieren/Multiplizieren/Dividieren kann, um mehr Stellen zu berechnen.
!UD2
@Kaeru Gaman
8. Schulstufe
@gekkonier
Wieder alle überlegungen umsonst! Da kann ich ja gleich den Source Code posten. Mit nicht weit meinte ich beim Addieren.
Ist ebenfalls ein Stringrechner. Braucht im Prinzip nur eine For Next Schleife.
Bevor ich's vergesse DANKE. Besonders für die Grafik.
Kann keine negativen Zahlen verwnden!
Abgesehen davon dass es soetwas schon gibt, meie neue standart Frage "Was haltet ihr davon?".
8. Schulstufe
@gekkonier
Wieder alle überlegungen umsonst! Da kann ich ja gleich den Source Code posten. Mit nicht weit meinte ich beim Addieren.
Code: Alles auswählen
Procedure Rest(Num)
test=-1
Repeat
If Num>test
result=addE
Else
Find=1
EndIf
test+10
addE+1
Until Find
ProcedureReturn result
EndProcedure
Procedure OneNum(Num)
test=-1
Repeat
If Num>test
add=test+1
Else
Find=1
EndIf
test+10
Until Find
result=Num-add
ProcedureReturn result
EndProcedure
Procedure HNum(Num1,Num2)
If Num1>Num2
result=Num1
EndIf
If Num1<Num2
result=Num2
EndIf
If Num1=Num2
result=Num1
EndIf
ProcedureReturn result
EndProcedure
Procedure$ Addition(Summand1$,Summand2$)
If Summand1$ And Summand2$
SumLen1=Len(Summand1$)
SumLen2=Len(Summand2$)
largerSumLen=HNum(SumLen1,SumLen2)
LKom1=FindString(Summand1$,".",1)
LKom2=FindString(Summand2$,".",1)
largerLKom=HNum(LKom1,LKom2)
If largerLKom=0
KomELI=1
EndIf
If LKom1=0 And LKom2>=1
AfterKom$=Mid(Summand2$,LKom2,SumLen2)
KomELI=2
EndIf
If LKom1>=1 And LKom2=0
AfterKom$=Mid(Summand1$,LKom1,SumLen1)
KomELI=2
EndIf
RLen1=SumLen1-LKom1
RLen2=SumLen2-LKom2
largerRLen=HNum(RLen1,RLen2)
;{ FließkommaZahlen
If KomELI=0
For k=largerSumLen To largerRLen Step -1
SSum1$=Mid(Summand1$,k,1)
SSum2$=Mid(Summand2$,k,1)
If SSum1$ And k<=SumLen1
SSum1=Val(SSum1$)
Else
SSum1=0
EndIf
If SSum2$ And k<=SumLen2
SSum2=Val(SSum2$)
Else
SSum2=0
EndIf
AddA=SSum1+SSum2+Rest
Rest=Rest(AddA)
Add=OneNum(AddA)
result$=Str(Add)+result$
Next
result$="."+result$
ForVal=largerLKom-1
ToVal=1
Else
result$=AfterKom$+result$
ForVal=largerSumLen
ToVal=1
EndIf
;} EndFließkommaZahlen
;{ GanzeZahlen
For k=ForVal To ToVal Step -1
Step1:
Dif1=k-(largerSumLen-SumLen1)
Dif2=k-(largerSumLen-SumLen2)
SSum1$=Mid(Summand1$,Dif1,1)
SSum2$=Mid(Summand2$,Dif2,1)
If SSum1$ And Dif1>=1
SSum1=Val(SSum1$)
Else
SSum1=0
EndIf
If SSum2$ And Dif2>=1
SSum2=Val(SSum2$)
Else
SSum2=0
EndIf
AddA=SSum1+SSum2+Rest
Rest=Rest(AddA)
Add=OneNum(AddA)
result$=Str(Add)+result$
Next
;} EndGanzeZahlen
If Rest
result$=Str(Rest)+result$
EndIf
Else
result$="-1"
EndIf
ProcedureReturn result$
EndProcedure
Bevor ich's vergesse DANKE. Besonders für die Grafik.
Kann keine negativen Zahlen verwnden!
Abgesehen davon dass es soetwas schon gibt, meie neue standart Frage "Was haltet ihr davon?".
Ich hab da noch ne Frage: Warum drehen sich die Punkte nicht von 0° aufwärts bis zu 360°? Damit meine ich dass die Punkte "irgendwo" gezeichnet werden und nicht den Kreis nach,
Code: Alles auswählen
OpenWindow(0,10,10,300,300,"Kreis",#PB_Window_SystemMenu|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
r=140
StartDrawing(WindowOutput(0))
For alfa=0 To 360
x=Sin(alfa)*r
y=Cos(alfa)*r
Plot(x+r+10,y+r+10)
Delay(10)
Next
StopDrawing()
Repeat
EventID=WaitWindowEvent()
If EventID=#PB_Event_CloseWindow
Quit=1
EndIf
Until Quit=1
Weil die Argumente der Winkelfunktionen als Radiant angegeben werden. Also umrechnen in Winkel:
Gruss
Helle
Code: Alles auswählen
OpenWindow(0,10,10,300,300,"Kreis",#PB_Window_SystemMenu|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
r=140
StartDrawing(WindowOutput(0))
For alfa=0 To 360
x=Sin((alfa*#PI)/180)*r
y=-Cos((alfa*#PI)/180)*r ;Zeichenbeginn oben und in Uhrzeigersinn
Plot(x+r+10,y+r+10)
Delay(10)
Next
StopDrawing()
Repeat
EventID=WaitWindowEvent()
If EventID=#PB_Event_CloseWindow
Quit=1
EndIf
Until Quit=1
Helle