project_files/hwc/rtl/pmath.c
author unc0rr
Mon, 18 Apr 2016 21:47:39 +0300
changeset 11652 09ebdfe364d9
parent 8047 25a4daa6473c
child 14206 801dc57371c3
permissions -rw-r--r--
Fix fpcrtl_strappendA, which cut last char from UserPathPrefix leading to PHYSFS_setWriteDir fail with 'File not found' error, which led to lack of writing dir and logFile handle being nil, which led to crash on attempt to write to (absent) log file

#include "pmath.h"
#include <stdlib.h>
#include <math.h>

/*
 * power raises base to the power power.
 * This is equivalent to exp(power*ln(base)). Therefore base should be non-negative.
 */
float fpcrtl_power(float base, float exponent)
{
    return exp(exponent * log(base));
}

/* Currently the games only uses sign of an integer */
int fpcrtl_signi(int x)
{
    if(x > 0){
        return 1;
    }
    else if(x < 0){
        return -1;
    }
    else{
        return 0;
    }
}

float fpcrtl_csc(float x)
{
    return 1 / sin(x);
}

float __attribute__((overloadable)) fpcrtl_abs(float x)
{
    return fabs(x);
}
double __attribute__((overloadable)) fpcrtl_abs(double x)
{
    return fabs(x);
}
int __attribute__((overloadable)) fpcrtl_abs(int x)
{
    return abs(x);
}

int64_t __attribute__((overloadable)) fpcrtl_abs(int64_t x)
{
    return x < 0 ? -x : x;
}