mirror of
https://gitlab.com/ryandwyer/perfect-dark
synced 2026-06-19 07:17:00 -04:00
57 lines
685 B
C
57 lines
685 B
C
#include <ultra64.h>
|
|
#include "internal.h"
|
|
|
|
f32 fabsf(f32 value);
|
|
|
|
#pragma intrinsic (fabsf)
|
|
|
|
f32 func00047d20(f32 arg0)
|
|
{
|
|
f32 sp1c;
|
|
f32 sp18;
|
|
f32 sp14;
|
|
f32 sp10;
|
|
f32 sp0c;
|
|
s32 sp08;
|
|
s32 sp04;
|
|
|
|
sp0c = fabsf(arg0);
|
|
|
|
if (sp0c < 0.00000011920929f) {
|
|
return 1;
|
|
}
|
|
|
|
sp04 = (s32) (sp0c / 0.6931471824646f);
|
|
|
|
if (sp04 > 1024) {
|
|
if (arg0 >= 0) {
|
|
return MAXFLOAT;
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
sp10 = sp0c - sp04 * 0.6931471824646f;
|
|
sp08 = 1;
|
|
sp1c = 1;
|
|
sp18 = 1;
|
|
|
|
do {
|
|
sp14 = sp1c;
|
|
sp18 *= sp10 / sp08;
|
|
sp1c += sp18;
|
|
sp08++;
|
|
} while (sp1c != sp14);
|
|
|
|
while (sp04) {
|
|
sp1c *= 2;
|
|
sp04--;
|
|
}
|
|
|
|
if (arg0 >= 0) {
|
|
return sp1c;
|
|
} else {
|
|
return 1 / sp1c;
|
|
}
|
|
}
|