THE FOLLOWING WAS INVENTED BY FOLKS FAR SMARTER THEN ME I'M JUST TRYING TO MAKE IT A FUNCTIONAL C LIBRARY THAT DOSEAS MUCH AS I CAN WITH + - BIT SHIFTS AND FIX POINT
the CORDIC algorithm for sin and cos where z starts as the angle x at 1 y at 0 and i is number of iterations. This is a kinda c kinda psudo code version of it as you can see sin and cos are both found at once atanz is a array of 20 atan( 2^-i)*(1<<20) the 20 bitshift is because this is all done in fix point 32 bit int Q=20 so thats where the decimal falls 20 binary places from the back
struct sincos CORDIC_sin_cos( float ang){
int y, x, z, ny, nx ;
x =1*(1<<20);
y = 0;
z=(int32_t) ang * (1<<20);
for ( int i = 0 ; i < 20 ; i++ ){
if ( z <0 ){
nx = x + ( y >> i ) ;
ny = y - ( x >> i) ;
z += atanz[ i ] ;
}else{
nx = x - ( y >> i ) ;
ny = y + ( x >> i ) ;
z -= atanz[ i ] ;
}
x = nx ;
y = ny ;
}
struct sincos{
float sin =(float) y / (1<<20) ;
float cos =(float) x / (1<<20) ;
}sincos;
return sincos ;
}
since tan is sin/cos thats your basic trig functions asin can be found by entering the sin the target and running the formula to push the y to the target then getting the z which starts at 0 for this . Acos can be done the same way if it is positive if it is negitive it is the same as asin( abs( input ) ) + pi /2
LOGARITHMIC MATH
BODWITCH NAPIER AND HOW TO MAKE MATH EASY
Ok so here is where I am with the use of log and exp allthou I have a sorta working CORDIC function for both log and exp it's only sorta working and this is kinda way cooler also it works.
Using exp :
There is actually more but that should give you an idea there is also e and the hyperbolic I spelt that right and messed up spelled so bad spell check didn't even understand me left spelling error left because back to the point:f
on the all log exp bitshift version of asinh and acosh I may be a bit off im not sure if the plus and minus 1 are in the right spot atanh is actualy easier:
so after saying all that
STATE OF MY CORDIC LOG AND EXP
not very great while they work as a unit least to cancel each other out sq kinda works but sqrt has a limit between 4 2.00 is right and 9 2.8125 25 same thing so im hitting an upper I think i got it well for the broken version EARL-C-T/CORDIC soon to maybe be fixed but right now buggy as fuck but enjoy if you use make all in the top level it should make everything it may not also if ya just run make it runs make clean im not great at makefiles and there is no configure at all anyway make all then if ya go to build/x86_64 run ./CORDIC_CAL you will be in a little shell commands are sq sqrt sct for sin tan cos asin acos log exp quit all commands besides quit are to be followed by a float there out put is to stdin and thats all for now help dosnt do anything i havent added a help file for it to print yet the fix point lib it uses is in libfixpnt wich i have actually installed so ya i forgot. this wont work unless ya install the libfixpnt.so or change the requires compiler or watever way to make it work and libCORDIC contains the rest wich is in a static lib or watever ya wanna call it I'm tired that one should be fine for compiling
C library of for navigation on a spherical earth currently trying to optimize it and make it runnable on low-power current target is cortex-A53 arm-8-a aarch64 libre computer aml-s805x-ac
Long-range antenna
Nothing special strapped a wifi dongle to a dish dish picked up wifi a half mile away