Automatische Einrücküberarbeitung
zu den Fragen :
Wurde alle richtig beantwortet, random(10) war einfach nur dafür, das er nicht mit jedem durchlauf aktuallisiert.
WindowEvent brauche ich (bei 3.3) damit das SetGadget() umgesetzt wird, sonst habe ich ein leeres Fenster wo nix passiert.
Loc = Int(Loc()/Lof()*290)
funzt problemlos, und ich denke das liegt auch am INT, denn ich hatte schon mal probs damit wenn ich INT weglasse, das dann als ergebnis immer 0 kam.
Bei dir würde ja "theoretisch" auch ein Prob kommen :
290*Loc(1)/Lof(1), denn wenn Loc() doch mal "sehr groß" wird, wäre 290*Loc auch außerhalb von INT und es kommt zu falschen werten.
Wurde alle richtig beantwortet, random(10) war einfach nur dafür, das er nicht mit jedem durchlauf aktuallisiert.
WindowEvent brauche ich (bei 3.3) damit das SetGadget() umgesetzt wird, sonst habe ich ein leeres Fenster wo nix passiert.
Loc = Int(Loc()/Lof()*290)
funzt problemlos, und ich denke das liegt auch am INT, denn ich hatte schon mal probs damit wenn ich INT weglasse, das dann als ergebnis immer 0 kam.
Bei dir würde ja "theoretisch" auch ein Prob kommen :
290*Loc(1)/Lof(1), denn wenn Loc() doch mal "sehr groß" wird, wäre 290*Loc auch außerhalb von INT und es kommt zu falschen werten.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
der gag ist, dass die umgekehrte reihenfolge dafür sorgt, dass selbst als integer feine werte rauskommen.
gesetzt den fall, Loc ist 32000 und Lof ist 42000.
als int ist 32000/42000 = 0, mal 290 ist immer noch null.
290*32000 ist aber 9'280'000, wenn ich das durch 42000 teile, kommt auch als integer 220 raus.
> 290*Loc(1)/Lof(1), denn wenn Loc() doch mal "sehr groß" wird, wäre 290*Loc auch außerhalb von INT und es kommt zu falschen werten.
genau.
dort bekomme ich das problem, dass ich die obergrenze eines Long nicht überschreiten darf,
sonst kommt es durch den overflow zu falschen ergebnissen.
merke:
die reihenfolge der werte innerhalb einer rechnung kann bei der programmierung von immenser bedeutung sein,
auch wenn die formel mathematisch identisch ist.
gesetzt den fall, Loc ist 32000 und Lof ist 42000.
als int ist 32000/42000 = 0, mal 290 ist immer noch null.
290*32000 ist aber 9'280'000, wenn ich das durch 42000 teile, kommt auch als integer 220 raus.

> 290*Loc(1)/Lof(1), denn wenn Loc() doch mal "sehr groß" wird, wäre 290*Loc auch außerhalb von INT und es kommt zu falschen werten.
genau.
dort bekomme ich das problem, dass ich die obergrenze eines Long nicht überschreiten darf,
sonst kommt es durch den overflow zu falschen ergebnissen.
merke:
die reihenfolge der werte innerhalb einer rechnung kann bei der programmierung von immenser bedeutung sein,
auch wenn die formel mathematisch identisch ist.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Ich stimme zu, den Überlauf zu vermeiden bei großen Dateien sollte ein Ziel sein.Kaeru Gaman hat geschrieben: 290*32000 ist aber 9'280'000, wenn ich das durch 42000 teile, kommt auch als integer 220 raus.
> 290*Loc(1)/Lof(1), denn wenn Loc() doch mal "sehr groß" wird, wäre 290*Loc auch außerhalb von INT und es kommt zu falschen werten.
genau.
dort bekomme ich das problem, dass ich die obergrenze eines Long nicht überschreiten darf,
sonst kommt es durch den overflow zu falschen ergebnissen.
merke:
die reihenfolge der werte innerhalb einer rechnung kann bei der programmierung von immenser bedeutung sein,
auch wenn die formel mathematisch identisch ist.
Das Beispiel oben mal anders herum aufgezogen:
Lof() ist in jedem Fall immer größer als Loc().
Daher ist Lof()/Loc() immer > 0, ausser Loc() ist Null!
Also rechnen wir doch mit dem Kehrwert:
Loc = Int(290/(Lof()/Loc())
Mit dieser Rechnung dürfte es keinen Überlauf geben, da erst die Division Lof()/Loc() ausgeführt wird, und das Ergebnis kann maximan Lof() sein.
Das muss dann aber eine "Sehr sehr sehr" große Datei sein.

Ich hoffe, ich habe mich jetzt nicht vertan, aber mein Taschenrechner lügt nur, wenn ich mich vertippe

michel51
Mac OS X Snow Leopard (10.6.8 ) Intel
PureBasic V 5.11(X64), V 5.21(x64)
Zum Lernen ist niemand zu alt.
Mac OS X Snow Leopard (10.6.8 ) Intel
PureBasic V 5.11(X64), V 5.21(x64)
Zum Lernen ist niemand zu alt.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
> Daher ist Lof()/Loc() immer > 0, ausser Loc() ist Null!
ich habe den eindruck, du hast den kern doch nicht verstanden.
einen überlauf zu vermeiden war der zweite punkt den ich erwähnt habe.
probier diesen code mal aus:
falls du dich über das ergebnis wunderst, les mein vorletztes posting noch mal.
ich habe den eindruck, du hast den kern doch nicht verstanden.
einen überlauf zu vermeiden war der zweite punkt den ich erwähnt habe.
probier diesen code mal aus:
Code: Alles auswählen
Loc = 31456
Lof = 56392
Balken = 290/(Lof/Loc)
Debug Balken
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Probiere es mal so:michel51 hat geschrieben:Aaahh.., gerade fällt mir ein, das direkte Starten einer .pb Datei (Doppelklick) mit gleichzeitigem Öffnen von Purebasic funktioniert auf (meinem) Mac nicht. Weiss aber noch nicht warum.
Kennst du eine Methode, wie man den geänderten Code (also "Filename.pb.pb") in den Editor laden kann zum anzeigen?

Code: Alles auswählen
Source$="C:\MySource.pb"
RunProgram(#PB_Compiler_Home+"PureBasic.exe",Source$,#PB_Compiler_Home,#PB_Program_Wait)
Funktioniert leider auch nicht. Hier mein Versuch:al90 hat geschrieben:Code: Alles auswählen
Source$="C:\MySource.pb" RunProgram(#PB_Compiler_Home+"PureBasic.exe",Source$,#PB_Compiler_Home,#PB_Program_Wait)
Code: Alles auswählen
RunProgram(#PB_Compiler_Home+"PureBasic.app","FileName.s+".pb", #PB_Compiler_Home, #PB_Program_Wait)

Auf jeden Fall bekomme ich die Datei "FileName.s+".pb" (noch immer) nicht automatisch in den Editor.
michel51
Mac OS X Snow Leopard (10.6.8 ) Intel
PureBasic V 5.11(X64), V 5.21(x64)
Zum Lernen ist niemand zu alt.
Mac OS X Snow Leopard (10.6.8 ) Intel
PureBasic V 5.11(X64), V 5.21(x64)
Zum Lernen ist niemand zu alt.
ich kenne mich mit dem Mac nicht aus, aber ich denke, dass der Compilermichel51 hat geschrieben:Hier mein Versuch:
Code: Alles auswählen
RunProgram(#PB_Compiler_Home+"PureBasic.app","FileName.s+".pb", #PB_Compiler_Home, #PB_Program_Wait)
auch dort meckern wird, wenn man die Anführungsstriche falsch setzt.
Zusätzlich: Hast Du Dir FileName.s schon mal testweise ausgeben lassen?
Code: Alles auswählen
Debug FileName.s
Grüße ... Kiffi
a²+b²=mc²
Balken = 290Kaeru Gaman hat geschrieben: probier diesen code mal aus:Code: Alles auswählen
Loc = 31456 Lof = 56392 Balken = 290/(Lof/Loc) Debug Balken
OK, "/" ist eine Integerdivision, daher ist der Prozessbalken schnell voll als die Abarbeitung erledigt ist.
Durch das Umstellen von "290" nach vorne wird hier
290*Loc()/Lof()
verhindert, dass die Integerdivision Null wird. Die Formel wird von links nach rechts abgearbeitet.
Soweit richtig?
Hab den Code schon umgestellt.
Gibt es vielleicht eine andere Methode, den Prozessbalken zu füllen?
Allerdings ist ein Parameter ungewiss, nämlich die Anzahl der Umläufe.
Hmm.., ich glaube, ich werde mich da im Moment nicht tiefer eindenken.
So wie es ist läuft der Code (bis auf das Öffnen der Datei) und macht, was er soll.
michel51
Mac OS X Snow Leopard (10.6.8 ) Intel
PureBasic V 5.11(X64), V 5.21(x64)
Zum Lernen ist niemand zu alt.
Mac OS X Snow Leopard (10.6.8 ) Intel
PureBasic V 5.11(X64), V 5.21(x64)
Zum Lernen ist niemand zu alt.
Hast recht, das ist aber nur ein Kopierfehler. Im Code ist es richtig, ohne ' " ' vor FileName.Kiffi hat geschrieben:ich kenne mich mit dem Mac nicht aus, aber ich denke, dass der Compilermichel51 hat geschrieben:Hier mein Versuch:
Code: Alles auswählen
RunProgram(#PB_Compiler_Home+"PureBasic.app","FileName.s+".pb", #PB_Compiler_Home, #PB_Program_Wait)
auch dort meckern wird, wenn man die Anführungsstriche falsch setzt.
Ja, der Pfad stimmt.Zusätzlich: Hast Du Dir FileName.s schon mal testweise ausgeben lassen?Stimmt der Pfad?Code: Alles auswählen
Debug FileName.s
/Edit/ Oder meinst du einen anderen Pfad? Filename als Datei ist mit kpl. Pfad angegeben. Oder soll das was anderes stehen.
Die Hilfe ist in der Hinsicht leider nicht sehr hilfreich.
michel51
Mac OS X Snow Leopard (10.6.8 ) Intel
PureBasic V 5.11(X64), V 5.21(x64)
Zum Lernen ist niemand zu alt.
Mac OS X Snow Leopard (10.6.8 ) Intel
PureBasic V 5.11(X64), V 5.21(x64)
Zum Lernen ist niemand zu alt.