Вот код C;
#include<stdio.h>
#include<math.h>
int main()
{
double n=10.0;
double automatic = pow(10.0,log10(n)-log10(5.0));
printf("%.9lf\n",log10(n)-log10(5.0));
printf("%.9lf\n",pow(10.0,0.30102996));
double manual = pow(10.0,0.30102996);
printf("%.9lf %lf\n",automatic, floor(automatic));
printf("%.9lf %lf\n",manual,floor(manual));
return 0;
}
Выход:
0.301029996
1.999999836
2.000000000 1.000000
1.999999836 1.000000
Из вывода я могу сделать вывод, что в pow (x, y) y округляется до 6 цифр, потому что его подпись имеет вид pow (double x, double y), так что 0,301029996 становится 0,301030, и поэтому значение Automatic равно 2,000000000, иначе это было бы то же, что ручной.
Мои вопросы:
- Верен ли мой вывод?
- Если ответ на первый вопрос верен, то как мы можем обойти это округление, чтобы получить более точные результаты?