Division wird falsch ausgegeben

Anfängerfragen zum Programmieren mit PureBasic.
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

Ist auch richtig so...

Man verwendet ja auch nicht wo es geht Interger. Aber bei wichtigen Anwendungen
wie zB. einem Rechner oder irgendein Programm das Zinsen usw. berechnet, dort wird dann natürlich auf etwas anderes gesetzt...
heiko
Beiträge: 6
Registriert: 15.08.2008 09:47

Warum keine Ganzzahlen

Beitrag von heiko »

Ich möchte eine Gleichung mit Hilfe der Intervallschachtelung lösen.
Deshalb mit Float oder Double. Mein "Programm" hatte nicht so richtig funktioniert. Beim Fehlersuchen bin ich dann - durch ausprobieren- auf den Punkt gekommen den ich nicht so ganz verstanden hatte.

Ich werde mit den gemachten Anregungen weitermachen.

Nochmal danke.

Heiko
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Warum keine Ganzzahlen

Beitrag von Kaeru Gaman »

heiko hat geschrieben:Ich möchte eine Gleichung mit Hilfe der Intervallschachtelung lösen.
dann empfielt es sich vielleicht doch mit integer zu arbeiten?
also, bei jedem nächsten schritt mit 10 multiplizieren, um eine nachkommastelle mehr zu simulieren....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
heiko
Beiträge: 6
Registriert: 15.08.2008 09:47

Integer Nachkommastellen

Beitrag von heiko »

Also das mit dem Intger und mit 10 multiplizieren klingt interessant.
Ich habe aber wirklich keine Ahnung wie man das durchführen kann.
Ich werde mal die Debugs aus dem Code entfernen und dann hier posten.
Vielleicht siehst Du dann was mein Problem ist.
Oder ich seh den Wald vor lauter Bäumen nicht.

Gruss

Heiko
heiko
Beiträge: 6
Registriert: 15.08.2008 09:47

Programmcode

Beitrag von heiko »

Hallo also hier ist der Code. Wie gesagt, bin Anfänger.

Code: Alles auswählen

Dim x.d(1000)
Dim y.d(1000)
Global Merker1.d
Global Merker2.d
Define test.d
Global  k.i


Procedure.f Funktion(x.f)
Define x.f
Define y.f

;hier die Formel eintragen zum Beispiel y=x*x-4.0

y=x*x-4
;y=x*x-3
;y=-1.5-Log10(x)
;Ende Formel
ProcedureReturn y
EndProcedure


;Startwerte
x(0)=0.0001
x(1)=7.0


For k = 1 To 100
y(k-1)=Funktion(x(k-1))
y(k)=Funktion(x(k))

If y(k-1)*y(k)>0
  Debug "Keine Nullstelle"
  Goto Fertig
EndIf
    
    
    x(k+1)=(x(k-1)*y(k)-x(k)*y(k-1))/(y(k)-y(k-1))
    ;Mittelwert Test
    ;x(k+1)=(x(k+1)+x(k))/2
    y(k+1)= Funktion(x(k+1))

  
  If y(k+1)=0
         Debug "Fertig"
;         Debug y(k+1)
         Debug x(k+1)
    Goto Fertig
  EndIf


  If y(k+1)*y(k-1)<0
      Debug "Ist kleiner"
      Debug x(k)
      Debug x(k+1) 
     x(k)=x(k-1)
     y(k)=y(k-1)
     
   Else
     Merker1=x(k+1)
     Merker2=y(k+1)
     x(k+1)=x(k)
     y(k+1)=y(k)
     x(k)=Merker1
     y(k)=Merker2
     Debug "Ist grösser"
     Debug x(k)
  EndIf

Next k


Fertig:
; Debug y(k-1)
; Debug y(k)
; Debug y(k+1)
; Debug x(k-2)
; Debug x(k-1)
Debug "k"
Debug k
Debug x(k+1)
Debug Funktion(x(k+1))
; Debug x(k+2)
; Debug x(k+3)
; Debug x(k+4)
; Debug x(k+5)
; Debug x(k+6)

Abbruchkriterium ist schwierig.

Vielleicht geht es ja wirklich mit Integer besser.

Heiko
Antworten