Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 07.09.2007, 19:33 Titel: |
|
|
Ja Kürze ist doch immer gut. |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 07.09.2007, 19:36 Titel: |
|
|
Caran hat Folgendes geschrieben: | Code: | if beobachter.xpos < xpos then
seite.a = (zpos - beobachter.zpos)
seite.b = (xpos - beobachter.xpos)
seite.c = sqr((seite.b^2)+(seite.a^2))
beobachter.yrot = -asin(seite.a/seite.c)*180/3.1415926 + 180
else
seite.a = (zpos - beobachter.zpos)
seite.b = (xpos - beobachter.xpos)
seite.c = sqr((seite.b^2)+(seite.a^2))
beobachter.yrot = asin(seite.a/seite.c)*180/3.1415926
end if |
| ..so etwa..
Code: | Const Rho=45.0/Atn(1)
With seite
.a = (zpos - beobachter.zpos)
.b = (xpos - beobachter.xpos)
.c = sqr((.b^2)+(.a^2))
beobachter.yrot =IIF( beobachter.xpos < xpos , -asin(.a/.c)*Rho + 180, asin(.a/.c)*Rho)
End With |
Const und With dienen hier nur der Lesbarkeit..
[Edit]
Es ist Gottseidank nur denjenigen, die sich wirklich mit FreeBASIC auskennen, aufgefallen, daß ich IFF geschrieben habe, statt IIF, wie es richtig ist
thx, 4 the hinz.. _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO..
Zuletzt bearbeitet von ytwinky am 07.09.2007, 21:18, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
atari gesperrt
Anmeldungsdatum: 26.08.2007 Beiträge: 144
|
Verfasst am: 07.09.2007, 19:45 Titel: |
|
|
du kurzform ist sehr unübersichtlich.
ich ziehe das erste vor. die geschwindigkeit ist unrelevant, weil der rechenaufwand bleibt. |
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 07.09.2007, 20:57 Titel: |
|
|
Diese Rechnung wird einmal bis höchstens 250mal pro Schleife weiderholt. Würde es sich lohnen das in ASM zu übersetzen um es schneller zu machen? |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 07.09.2007, 21:10 Titel: |
|
|
atari hat Folgendes geschrieben: | du kurzform ist sehr unübersichtlich.
ich ziehe das erste vor. die geschwindigkeit ist unrelevant, weil der rechenaufwand bleibt. |
es kommt bei speedcoding nicht auf die lesbarkeit an (die kann man durch Kommentare garantieren), sondern auf effizienz, und ytwinkys source ist da um einiges besser dran... es gilt immer: so weit optimieren wie möglich!
plonk...
_________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
atari gesperrt
Anmeldungsdatum: 26.08.2007 Beiträge: 144
|
Verfasst am: 07.09.2007, 21:30 Titel: |
|
|
freebasic ist ein sprungbrett für die qbasic-progger. daher ist meine devise :
ein lesbaren code für qbasic -progger machen, damit die scheu vor dem umstieg genommen wird.
mit delphi , c++ usw kann man es machen. da ist es auch pflicht, sonst wird man als schlechter progger bezeichnet. ist ja auch klar, alle profiprogramme werden in delphi und c++ geschrieben und wer das nicht kann verdient auch kein geld und keine anerkennung.
das was da als kürzel geschrieben wurde ist keine kunst, mache ich als winavr-c-progger auch aus dem handgelenk.
kunst ist es , den anderen das klar darzustellen, das können nur sehr wenige und zwar ich und einpaar andere aus diesen forum.
es heisst : ich bin der könig und ihr seid meine diener und hab zu gehorchen oder ihr werdet gehängt.
ich bin aber ein gnädiger könig, ihr könnt weiterleben. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 07.09.2007, 21:41 Titel: |
|
|
hier, kriegst'n keks...
 _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 07.09.2007, 21:43 Titel: |
|
|
[/ignoremode]
*zensiert durch den Autor!*
[ignoremode] _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO..
Zuletzt bearbeitet von ytwinky am 09.09.2007, 18:01, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 08.09.2007, 01:04 Titel: |
|
|
@atari
Optimierungen und Lesbarkeit von Code sollten das 'A und O' der Programmierung sein, sowohl in QB als auch FB... das selbe gillt genauso auch fuer C/C++
Mitunter helfen kommentare, nicht nur anderen sondern auch einen selbst sich in einem Code zurecht zu finden, dem Compiler interessieren diese Zeilen nicht. Die Optimierung jedoch bringt eine Menge....
Also was Du so von Dir gibst ist absoluter Muell
btw: Die Erde dreht sich um die Sonne, nicht umgekehrt! _________________
 |
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 08.09.2007, 09:11 Titel: |
|
|
Zum Thema Optimiertung:
In meinem Spiel ist das so ziemlich oberste Priorität. Ist ja auch logisch umso mehr Leistung das bringt, desto mehr Gegner können da rein ohne, dass das Programm zu ruckeln beginnt.  |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 08.09.2007, 14:23 Titel: |
|
|
Caran hat Folgendes geschrieben: | Diese Rechnung wird einmal bis höchstens 250mal pro Schleife weiderholt. Würde es sich lohnen das in ASM zu übersetzen um es schneller zu machen? |
Meist nicht, da FBC selbst schon ASM-Code generiert (bei Option -r wird die asm-Datei nicht gelöscht und man kann sie sich mal ansehen).
ytwinky hat da schon die richtigen Vorschläge gemacht.
Wenn möglich würde ich noch solche x^2 durch x*x ersetzen.
Die Lesbarkeit kann man deutlich erhöhen wenn man den alten nicht optimierten Code als Kommentar beibehält und nicht löscht. _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 08.09.2007, 14:43 Titel: |
|
|
volta hat Folgendes geschrieben: | Wenn möglich würde ich noch solche x^2 durch x*x ersetzen. | Bei meinen Versuchen mit Counter.Bas von MichaelW habe ich festgestellt, das es keinen Unterschied macht, ob ich x^2 oder x*x nehme, deshalb bin ich darauf nicht näher eingegangen..
Ich schätze mal, daß der Compiler hier bereits optimiert
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 08.09.2007, 15:12 Titel: |
|
|
Ja, stimmt,
wird immer mit Multiplikation (fmul) erledigt.
Etwas überraschend für mich war es, dass der Zugriff auf Variablen in With ... End With viel langsamer ist.
Code: | seite.c = sqr((seite.b^2)+(seite.a^2)) | ist schneller! Hätte ich nicht gedacht! _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 08.09.2007, 15:29 Titel: |
|
|
Wie gesagt dienten Const und With hier nur der Lesbarkeit..
With bringt keine Ersparnis, da der Compiler sich dann ja irgendwie merken muß, worauf sich die punktierten Variablen beziehen. Nur so kann ja auch die Verschachtelung von With funktionieren, wobei ich allerdings noch nicht untersucht habe, ob der Aufwand beim Verschachteln von With-Anweisungen steigt, glaube ich aber nicht..
Mit Counter.Bas habe ich schon viele Sachen entdeckt, u.A. daß Mid() zwar viele Taktzyklen benötigt, aber lediglich ~genausoviele wie Left() und Right().
Der direkte Stringzugriff mit Pointerschreibweise ist aber vergleichsweise schnell.. _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 08.09.2007, 19:37 Titel: |
|
|
In meinen Augen sollte man seinem Stil entsprechend programmieren, und der Großteil verwendet nunmal gern effizienten Code, der das macht was er soll.
Und warum soll ich in FreeBASIC die gegebenen Möglichkeiten nicht ausnutzen und den anderen zeigen, dass FB mehr als nur ein 32-Bit-QB ist?
(Okok, ich bin ja schon still...don't feed the f*cking troll...) _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 09.09.2007, 03:56 Titel: |
|
|
Ist in der tat verwunderlich was Volta da anspricht....
Schon ein kleines Beispiel:
Code: |
#include "counter.bas"
Type test
a as integer
b as ubyte
c as string
end type
dim Counter_Test as test
Counter_Begin
With Counter_Test
.a=10000
.b=255
.c="Hallo"
End With
Counter_End
?Counter_Cycles '129 cycles
Counter_Begin
Counter_Test.a=10000
Counter_Test.b=255
Counter_Test.c="Hallo"
Counter_End
?Counter_Cycles '113 cicles
sleep
|
Zeigt den (in diesem Fall zwar nur sehr geringen) Unterschied...
Die Arbeit mit With/End With ist CPU Lastiger _________________
 |
|
Nach oben |
|
 |
atari gesperrt
Anmeldungsdatum: 26.08.2007 Beiträge: 144
|
Verfasst am: 09.09.2007, 10:08 Titel: |
|
|
ist eigentlich logisch, das jede weitere kontrolle zeit verbraucht, ist schliesslich ein befehl der abgearbeitet werden muss und vermerkt werden muss und der speicher evtl anders angesprochen wird, es ist keine rem-zeile. brauchst schliesslich nur den asm-code anschauen.
jeder befehl hat andere eigenschaften, es ist keine zauberei.
mfg |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 09.09.2007, 10:37 Titel: |
|
|
versuchs doch mal ohne edit, oder hast Du angst Du koenntest Deinen Verstand ueberlasten wenn Du alles auf einmal schreibst ?
Klar ist da noch ein Befehl... ist bei dem Beispiel vielleicht falsch ruebergekommen, denn wenn man die messzeit innerhalb des With/End With setzt ist das ergebniss gleich....
und zum ASM, ist es eindeutig das ein 'mov dword ptr [ebp-12], 10000' wesentlich schneller ist als:
lea eax, [ebp-12]
mov dword ptr [ebp-16], eax
mov eax, dword ptr [ebp-16]
mov dword ptr [eax], 10000
worum es aber gar nicht geht, das ist eher eine Frage der FB Internen verarbeitung, nicht wie der ASM Code hinterher aussieht sonder wie FB ihn umsetzt. _________________
 |
|
Nach oben |
|
 |
atari gesperrt
Anmeldungsdatum: 26.08.2007 Beiträge: 144
|
Verfasst am: 09.09.2007, 15:58 Titel: |
|
|
Zitat: |
und zum ASM, ist es eindeutig das ein 'mov dword ptr [ebp-12], 10000' wesentlich schneller ist als:
|
dann schreib das doch so um, dafür gibt es in freebasic diese asm-zeilen.
hier und da kann man immer etwas rauskitzeln.
Zitat: |
sonder wie FB ihn umsetzt
|
meinst du die freebasic-hersteller können alles schaffen.
wie ich oben bereits gesagt habe , den asm-code anschauen und dran arbeiten. was verlangst du eigentlich von einem freeware-programm. freebasic ist kritikfrei und topfit. |
|
Nach oben |
|
 |
atari gesperrt
Anmeldungsdatum: 26.08.2007 Beiträge: 144
|
Verfasst am: 09.09.2007, 16:09 Titel: |
|
|
Zitat: |
Nicht nur ich weiß, daß du vom Fuchsweg weggezogen bist..
..'freundlicherweise' hat sich deine Telefonnummer ja nicht geändert..
Scharf auf Anrufe?
|
hatte ich gestern nacht.
eine anzeige läuft wegen unbekannt.
da meine frau schwer krank, hat sie das sehr mitgenommen.
mfg |
|
Nach oben |
|
 |
|