• Hallo,

    das Macro MakeWWFixed ist ja als Float-Multiplikation definiert

    Code
    #define MakeWWFixed(fl) ((dword) ((fl)*65536L))          /* geos.h */

    Weiß jemand, ob das der Compiler bereits auswertet, oder ob da wirklich jedes mal eine Rechenoperation zu Laufzeit ausgeführt wird?

    Rainer

    Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

  • Hi!

    Da dort „define“ steht, ersetzt der Kompiler einfach nur das „MakeWWFixed(fl)“ durch ein „((dword) ((fl)*65536L))“. Ist das „fl“ eine Variable, kann der Kompiler nichts weiter optimieren, so dass die Multiplikation jedes Mal ausgeführt wird, wenn die entsprechenden Code-Zeilen an der Reihe sind. Wenn das „fl“ eine Konstante ist, könnte es der Kompiler bereits optimieren (=ausrechnen). Ich würde aber nicht darauf wetten, dass er es wirklich tut.
    Oder anders ausgedrückt: Ich würde davon ausgehen, dass immer multipliziert wird.

    There are two rules in life:
    1. Never give out all of the information.

  • Das wäre ziemlich schlecht für die Laufzeit, wenn es jedes mal berechnet wird. Andererseits kann man MakeWWFixed mit Konstanten auch im UI-Code verwenden. Da ist ja nix mit Lauflaut. Das lässt mich etwas hoffen :)

    Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.