При вводе чисел не меняется значение выражения

211
06 февраля 2019, 04:10
double b = 2.5, m = 3, a = 1.4e-3, j, y, z; 
for (int i = 0; i < 3; i++) {
    cout << "j = ";
    cin >> j;
    y = (m * j) / tan(a) - exp(10 * m);
    z = 2 * y * b + sqrt(a + b);
    cout << "y = " << y << "\n";
    cout << "z = " << z << "\n";
}

Когда ввожу разные значения с клавиатуры, значения не меняются. Как испраить данную ошибку?

Answer 1

Второе слагаемое по порядку намного больше первого (при небольших значениях j), поэтому влияние первого слагаемого при точности вывода по умолчанию просто теряется.

Теряется оно при выводе небольшого количества значащих цифр, истинные значения отличаются. Однако при большей разнице в порядках и истинные значения сумм будут одинаковы (1e100 + 1.0 = 1e100) - из-за ограниченной точности вещественных чисел.

Вот так можно заметить различия:

 cout << std::cout.precision(15)<<"y = " << y << "\n";
 cout << std::cout.precision(15)<< "z = " << z << "\n";
READ ALSO
Чередование двух массивов java

Чередование двух массивов java

Элементы двух массивов нужно поочередно занести в 3 массивК примеру массивы A(n) и B(n) нужно записать как C(a1, b1, a2, b2, a3, b3)

252
Разбиение массива

Разбиение массива

Можем ли из массива вида: 2110

184
Получение объекта JSONObject и NullPointerException

Получение объекта JSONObject и NullPointerException

Пытаюсь создать тренировочный код, позволяющий выгружать с сайта wwwflickr

302