Seite 1 von 2

Kann mir jemand eine DLL bauen?

Verfasst: 21.06.2005 13:52
von Tietze
Hallo,

ich habe verzweifelt versucht mit Purebasic folgende Funktion zu programmmieren. Ich habe es mit den Double Userlibaries probiert aber irgendwie geht es nicht. Könnte mir jemand die Funktion als dll in c++ oder so programmieren?

Bild



Vielen Dank im vorraus, falls sich jemand die Mühe macht. Wäre sonst auch glücklich wenn man das mit PB lösen könnte, aber irgendwie habe ich das nicht hinbekommen.


Gruss

Thies

Verfasst: 21.06.2005 14:12
von zigapeda
die zeile wo procedure am anfang steht kann ich nicht lesen und die zeile unter var auch nicht. wenn du sie nicht als bild postest könnte ich es vll übersetzen. (also lesen schon aber die satzzeichen seh ich nicht wirklich, so viel wie ich da jetzt seh kommen , . : ; vor)

Verfasst: 21.06.2005 14:29
von traumatic
Was gibt's da nicht zu erkennen?

Code: Alles auswählen

procedure GeoGk(br,la:Twinkel;sy:Longint;var x,y:double);

Code: Alles auswählen

var
  brDezimal,laDezimal,rm,e2,c,bf,g,co,g2,g1,t,dl,fa,grad,min,sek:extended;
Ansonsten kann ich mich Rings nur anschließen: Geht raus! :D

Verfasst: 21.06.2005 15:57
von zigapeda
ok also ich habe es jetzt größtenteils verstanden was das programm macht aber so direkt übersetzten kann man das nicht. wenn ich es übersetzte brauch ich etwas länger und ich hab im moment keine zeit bzw. nicht viel zeit wegen APs

Verfasst: 21.06.2005 20:04
von MARTIN

Code: Alles auswählen

#PI = 3.1415926
#rho = 180/#PI


Structure Twinkel
  grad.l
  min.l
  sek.l
EndStructure

Procedure.l GeoGk(*br.Twinkel,*la.Twinkel,sy.l,*x.f,*y.f)

  DefType.f brDezimal,laDezimal,rm,e2,c,bf,g,co,g2,t,dl,fa,grad,min,sek
  e2=0.0067192;188
  c=6398786.84;9
  ;in Dezimal
  ;Breite
  brDezimal=*br\grad+*br\min/60+*br\sek/3600
  ;Länge
  laDezimal=*la\grad+*la\min/60+*br\sek/3600
  bf=brDezimal/#rho
  g=111120.619*brDezimal-15988.638*Sin(2*bf)+16.72995*Sin(4*bf)-0.02178*Sin(6*bf)+0.00003*Sin(8*bf)
  co=Cos(bf)
  g2=e2*(co*co)
  gl=c/Sqr(1+g2)
  t=Sin(bf)/Cos(bf);=tan(t)
  dl=laDezimal - sy * 3
  fa=co*dl/#rho
  *y=g+(fa*fa*t*gl/2)+(fa*fa*fa*fa*fa*gl*(5-18*t*t*t*t*t*t)/120)
  *x=rm+(sy*1000000)+500000
EndProcedure
Ich weiss nicht ob es richtig funktioniert weil ich nicht weiss was die funktion berechnet.
Ausserdem sind einige der Konstanten zu gross für PB.
Datentypen ist die echte Schwachstelle von PB.

Verfasst: 21.06.2005 20:11
von Green Snake
dateitypen hmm...aber wiso sind sie so klein?

ich meine float ist wirklich ein wenig schwach für pi berechnung.
ich meine...pi wurde auf eine billion stellen hinter dem komma berechnet, das würde ich gerne in pb eingeben :lol:
warum haben andere progsprachen mehr stellen?

Verfasst: 21.06.2005 20:24
von NicTheQuick
Weil viele andere Programmiersprachen z.B. auch Doubles unterstützen, PureBasic hingegen nur einfache Floats, oder auch Singles genannt. Doubles benötigen im Gegensatz zu Floats den doppelten Speicher, also 8 Bytes und können so eine höhere Genauigkeit erreichen.

Außerdem gibt es PI noch nicht mit mit einer Billion Nachkommastellen. Bis si soweit gekommen sind, müssen sie noch ein paar Jahrtausende rechnen, wenn sie nicht zwischenzeitlich eine zukünftige Rechnerarchitektur aufgreifen.

Verfasst: 21.06.2005 20:30
von Green Snake
halt

aus zuverläsiger quelle, nähmlich von microsoft weis ich, das das so ist.
2002 haben sies mit nem supercomputer beendet.

hier zitat aus encarta
Encarta hat geschrieben:
Pi, griechischer Buchstabe (p), der in der Mathematik als Symbol für das Verhältnis des Umfangs eines Kreises zu seinem Durchmesser benutzt wird.

Der griechische Mathematiker Archimedes stellte richtig fest, dass der Wert zwischen 3 10/70 und 3 10/71 liegen muss. 190 n. Chr. wurde in China die Zahl auf fünf Stellen berechnet: 3,14159. Das Symbol p für dieses Verhältnis verwendete erstmals 1706 der englische Mathematiker William Jones. Aber es wurde erst 1737, nachdem der Schweizer Mathematiker Leonhard Euler es übernommen hatte, in weiten Kreisen gebräuchlich. 1882 bewies der deutsche Mathematiker Ferdinand Lindemann, dass p eine transzendente Zahl ist – d. h., sie ist nicht Lösung irgendeiner polynomischen Gleichung mit rationalen Koeffizienten. Infolgedessen konnte Lindemann beweisen, dass die Quadratur des Kreises sowohl algebraisch als auch durch Zirkel und Lineal unmöglich ist.

Obwohl p eine irrationale Zahl ist, also unendlich viele Dezimalstellen besitzt, kann sie beliebig genau durch eine besondere mathematische Operation, eine Taylor-Reihenentwicklung, ermittelt werden. Mit Hilfe eines Computers wurde p 1989 auf 480 Millionen Stellen berechnet. Im März 1998 gelangen mit Hilfe eines Verbundes von Hochleistungsrechnern 51 Milliarden Stellen hinter dem Komma. Und mit Hilfe eines Supercomputers konnte p Ende 2002 sogar auf über eine Billion Stellen hinter dem Komma berechnet werden.

© 1993-2003 Microsoft Corporation. Alle Rechte vorbehalten.

ps. es sollte schon stimmen
ps2. aber ob microsoft wirklich zuverlässig ist :lol: ich denke nach windows 95 ist das auf 0 gesunken :lol:

Verfasst: 22.06.2005 06:47
von Kaeru Gaman
Green Snake hat geschrieben:2002 haben sies mit nem supercomputer beendet.
π ist eine irrationale Zahl, ein nicht endender, nicht periodischer dezimalbruch.
deshalb kann die berechnung niemals beendet werden...

selbst wenn man ein Mol nachkommastellen berechnet, gibt es immer noch mehr...

Verfasst: 22.06.2005 10:29
von Tietze
Hallo Jungs,

danke erstmal für die Kommentare und Martin für die Umsetzung in Purebasic. Bei der Umsetzung in PB bin ich auch auf das Problem mit den doubles gestosssen. Es gibt ja Userlibs dafür, aber irgendwie habe ich das nicht umgestzt bekommen.

Kann man in nächster Zeit doubles bei PB erwarten?

Gruß

Tietze