Расхождение в значении, хранящемся в двух переменных, имеющих одинаковую составную часть

0

Я пытался найти корень куба 10 ^ 12 и использовал следующий код в c++. К моему удивлению, возвращаемая стоимость была иной. Может ли кто-нибудь помочь мне с этой проблемой.

Выход: 10000 9999

    int y;
    double x=pow(1000000000000, 1./3);
    double r=floor(x);
    y=(int)r;
    cout<<x<<" ";
    cout<<y;
  • 0
    Это домашний вопрос или что-то? Похоже, что в последнее время мы страдаем от целого ряда вопросов о pow(x, 1./3) ...
Теги:
type-conversion
int
double

2 ответа

1

Здесь проблема с 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;
0
double x=pow(1000000000000, 1./3);

просто плохой 1/3 нельзя отобразить с двойным.

при работе с двойным результатом всегда интересно сказать меньше всего. 0,001 + 0,001 может быть только 0,0

  • 0
    «[I] просто плохо», «отображается с двойным», «всегда интересно», «может быть просто 0,0» - это набор неуместных фраз.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню