Интересно, как калькуляторы работают с точностью. Например, значение sin(M_PI)
не совсем равно нулю при вычислении с точностью double
:
#include <math.h>
#include <stdio.h>
int main() {
double x = sin(M_PI);
printf("%.20f\n", x); // 0.00000000000000012246
return 0;
}
Теперь я, конечно, хотел бы вывести ноль, когда пользователь вводит грех (π). Я легко могу округлить где-нибудь на 1e – 15, чтобы заставить этот конкретный случай работать, но это взлом, а не решение. Когда я начинаю округлять, как это, и пользователь вводит что-то вроде 1e – 20, он получает ноль обратно (из-за округления). То же самое происходит, когда пользователь вводит 1/10 и неоднократно нажимает клавишу = - когда он достигает порога округления, он получает ноль.
И все же некоторые калькуляторы возвращают простой ноль для sin (π), и в то же время они могут комфортно работать с такими выражениями, как (1e – 20) / 10. Где трюк?