Я пытался найти корень куба 10 ^ 12 и использовал следующий код в c++. К моему удивлению, возвращаемая стоимость была иной. Может ли кто-нибудь помочь мне с этой проблемой.
Выход: 10000 9999
int y;
double x=pow(1000000000000, 1./3);
double r=floor(x);
y=(int)r;
cout<<x<<" ";
cout<<y;
Здесь проблема с floor
. Что делать, если возвращаемое значение на самом деле (из-за ошибок точности) x = 9999.999? floor(x)
вернет 9999, тогда как cout << x
сразу распечатает номер с плавающей запятой, основываясь на его внутренней настройке точности, поэтому cout << x
делает неявное округление, поэтому 10000 отображается там.
Попробуйте округлить x правильно до int, выполнив следующее:
int y;
double x=pow(1000000000000, 1./3);
y=(int)(x+0.5); //Proper rounding
cout<<x<<" ";
cout<<y;
return 0;
double x=pow(1000000000000, 1./3);
просто плохой 1/3 нельзя отобразить с двойным.
при работе с двойным результатом всегда интересно сказать меньше всего. 0,001 + 0,001 может быть только 0,0
pow(x, 1./3)
...