Wurzel ziehen ohne floatsqroot?

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Guten Abend. Ich habe eine kleine Frage: Ist es möglich die Wurzel zu ziehen, ohne floatsqroot zu benutzen?
    Ich will in meinem Speedometer für die Geschwindigkeit keiten float...-Funktionen benutzen, weil mir gesagt wurde, dass diese laggen - was ich eigentlich auch bestätigen kann: MapIconStreamer laggt, wenn ich Distanzen mit float...-Funktionen berechne.

  • Wurzel(4)=4^0,5=2
    Wurzel ist das gleiche, wie hoch 0,5

    Das Hochzeichen habe ich schon versucht und dass ^0.5 die Wurzel ist, weiss ich auch.
    Aber wenn ich new var=2^2; printf("%d",var); mache, printet der Server nur 0.
    Das Problem hatte ich schon im englischen Forum gepostet, aber kam auf keine Lösung.


    ---


    #include <a_samp>


    forward SpeedCheck();
    forward PnP_OnGameModeInit();
    forward PnP_OnPlayerStateChange(playerid,newstate,oldstate);


    #define MAX_CHECKS 3


    new Float:LastPos[MAX_PLAYERS][3];
    new PlayerSpeed[MAX_PLAYERS][MAX_CHECKS];
    new PlayerTime[MAX_PLAYERS];
    new Checks[MAX_PLAYERS];
    new StateDriver[MAX_PLAYERS];


    public OnPlayerStateChange(playerid,newstate,oldstate)
    {
    StateDriver[playerid]=(newstate==PLAYER_STATE_DRIVER);
    return PnP_OnPlayerStateChange(playerid,newstate,oldstate);
    }


    public OnGameModeInit()
    {
    SetTimer("SpeedCheck",250,true);
    return PnP_OnGameModeInit();
    }


    public SpeedCheck()
    {
    new Float:pos[3];
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(GetPlayerPos(i,pos[0],pos[1],pos[2]))
    {
    if(StateDriver[i])
    {
    Checks[i]++;
    if(Checks[i]==MAX_CHECKS)
    Checks[i]=0;
    PlayerSpeed[i][Checks[i]]=floatround(floatsqroot((LastPos[i][0]-pos[0])*(LastPos[i][0]-pos[0])+(LastPos[i][1]-pos[1])*(LastPos[i][1]-pos[1])+(LastPos[i][2]-pos[2])*(LastPos[i][2]-pos[2]))/float(GetTickCount()-PlayerTime[i])*3600);
    }
    else
    {
    for(new j=0;j<MAX_CHECKS;j++)
    PlayerSpeed[i][j]=0;
    Checks[i]=0;
    }
    PlayerTime[i]=GetTickCount();
    LastPos[i]=pos;
    }
    }
    return 1;
    }


    stock GetPlayerSpeed(playerid,mph=false)
    {
    new v;
    for(new i=0;i<MAX_CHECKS;i++)
    v+=PlayerSpeed[playerid][i];
    v/=MAX_CHECKS;
    if(mph)
    v=floatround(v/(1.61));
    return v;
    }


    #define OnGameModeInit PnP_OnGameModeInit
    #define OnPlayerStateChange PnP_OnPlayerStateChange
    Das ist der Code. Und deshalb laggt der Server ein wenig. Ich musst im SpeedCheck die float...-Funktionen loswerden. Diese führen zu den Laggs Dx