genauigkeit von PB rechnungen?

Anfängerfragen zum Programmieren mit PureBasic.
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

genauigkeit von PB rechnungen?

Beitrag von Brügge »

hallo ich habe ein spiel programmiert was in die 3te dimension geht: also mit sehr viel mathe.

wenn ich eine variable mit den mathematischen formen (sin cos tan asin acos atan) 100 mal neu berechne verändert sich dann die genauigkeit? denn bei mir gibt es abweichungen von 100 (das ist bei meinem spiel nicht viel aber man merkt es doch schon so leicht) oder rechnet PB das immer sehr genau?

ich stelle diese frage nicht um PB schlecht zu machen, sondern weil ich eine enorme rechenaufgabe aufgestellt habe und sie mehrfach überprüft haben ob ich den fehler mache oder das programm (bis jetzt habe ich den fehler noch nicht gefunden) und da habe ich mir gedacht das ich mal nachfrage und mich hier nicht tot rechne :wink:

danke für eure posts

mfg
Benutzeravatar
Alves
Beiträge: 1208
Registriert: 19.04.2006 18:24
Kontaktdaten:

Beitrag von Alves »

Also ich meine doch, immer die gleiche Aufgabe müsste doch immer das gleiche Ergebnis geben, oder verstehe ich dich da falsch?

Ansonsten brauchste mich zu höheren Mathematikfragen nicht zu fragen...
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag von Brügge »

hmmnicht die gleichen aufgaben sondern eine variable immer mehr aufgaben stellen also mit dem ergebnis weiterrechnen...und das 32mal die sekunde (also sehr oft). kann es dann zu (rechenfehlern) also ungenauigkeiten fürhren?

wenn ihr wollt kann ich die rechnungen mal reinstellen aber dazu müsste ich ein bild zeichnen damit man es versteht ...

ist echt viel
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Liegt nicht an PB sondern an den Format von Float. Wenn Rechnengenauigkeit nicht reicht dann nehme Double

http://de.wikipedia.org/wiki/Float

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

wenn du Double verwendest, also fließkomma doppelter genauigkeit,
ist diese genauigkeit schon ziemlich hoch.

allerdings musst du natürlich bedenken, dass auch bei Doubles die genauigkeit begrenzt ist.
also, wenn du mit zahlen im bereich 1-10 arbeitest, wirds so bei der dutzenden nachkommastelle ungenau.
diese ungenauigkeit wird dann natürlich größer, wenn die zahlen größer werden,
aber du musst schon in die millionen/milliarden vorkomma gehen,
um die ungenauigkeiten bei hundertsteln/tausendsteln zu bekommen.

das musst du halt bedenken.

wenn du also 3.27*10^32 + Sin(x) rechnest, verschwindet der sinus wahrscheinlich in der ungenauigkeit.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag von Brügge »

double?? wie denn das?

also fload = variable.f aber double hab ich noch nie gehört wie viel bits sind das denn?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

welche PB Version hast du? Double gibts erst ab 4.0
doppelt soviele bits.

Float benutzt 32bit, Double 64bit.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag von Brügge »

die double wie hoch gehen die? denn ich muss manchmal 15000³ rechnen geht das mit denen?
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag von Brügge »

ich habe 3.90 demo :*( kann man sich die 4.* demo laden? oder gibt es sowas nicht?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

auch mit floats kannst du 15000³ berechnen:

Code: Alles auswählen

f.f = 15000.01*15000.01*15000.01

Debug f
Debugger hat geschrieben:3375006744576.0
aber wie du siehst, ist die genauigkeitsgrenze dort erreicht.

mit Doubles ist es "etwas" besser:

Code: Alles auswählen

f.d = 15000.01*15000.01*15000.01

Debug f
Debugger hat geschrieben:3375006750004.5005
Zuletzt geändert von Kaeru Gaman am 31.07.2006 22:12, insgesamt 3-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten