Jul-09-2023, 12:50 AM
I had trouble making this an attachment, so here is the Linux code:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void) {
double c = cos((90.0/360.0) * (2.0 * M_PI))
double s = sin(0)
printf("cos(90) = %lf, sin(0) = %lf\n", c, s)
return EXIT_SUCCESS
}
/*
To compile and run:
gcc trig_test.c -o trig_test
chmod +x trig_test
./trig_test
Output is:
cos(90) = 0.00000, sin(0) = 0.000000
So your cpp compiler is wrong too?
My concern is how many other angles might I have to treat specially?
If I rotate the point (100.0, 0.0, 0.0) by 90 degrees, the resulting x value is 6.<15 bits>e-15 away from the correct value.
So an error band of 10**(-14) might not be appropriate in such a case.
One would think that:
(1) Python developers would save themselves some effort by just using the gcc math library functions (at least for non bignums),
and that the gcc functions would save processing time by using available floating point hardware, which on my machines is 64 bits.
(2) As it appears they are not, the Python developers could save processing time by special casing multiples of pi/2 (90 degrees),
which are the well known maxima, minima and zero crossing points of the sin and cos functions,
instead of blindly evaluating some supposedly converging power series.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void) {
double c = cos((90.0/360.0) * (2.0 * M_PI))
double s = sin(0)
printf("cos(90) = %lf, sin(0) = %lf\n", c, s)
return EXIT_SUCCESS
}
/*
To compile and run:
gcc trig_test.c -o trig_test
chmod +x trig_test
./trig_test
Output is:
cos(90) = 0.00000, sin(0) = 0.000000
So your cpp compiler is wrong too?
My concern is how many other angles might I have to treat specially?
If I rotate the point (100.0, 0.0, 0.0) by 90 degrees, the resulting x value is 6.<15 bits>e-15 away from the correct value.
So an error band of 10**(-14) might not be appropriate in such a case.
One would think that:
(1) Python developers would save themselves some effort by just using the gcc math library functions (at least for non bignums),
and that the gcc functions would save processing time by using available floating point hardware, which on my machines is 64 bits.
(2) As it appears they are not, the Python developers could save processing time by special casing multiples of pi/2 (90 degrees),
which are the well known maxima, minima and zero crossing points of the sin and cos functions,
instead of blindly evaluating some supposedly converging power series.