происходит переполнение с типом данных double, как это устранить?
#include <iostream>
#include <cmath>
using namespace std;
int main() {
long int t, a, v0;
double s;
setlocale(LC_ALL, "RUS");
cout << "Введите время:";
cin >> t;
cout << "Введите ускорение:";
cin >> a;
cout << "Введите скорость:";
cin >> v0;
s = v0*t + (a * pow(t,2)) / 2.0;
cout <<"расстояние равно: " << s;
return 0;
}
Предупреждение C26451 Арифметическое переполнение: использование оператора "*" на байтовом значении 4 и приведение результата к байтовому значению 8. Приведите значение к более широкому типу перед вызовом оператора "*", чтобы избежать переполнения (io.2).
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Как видим, компилируется все нормально - https://ideone.com/Gp262Z
Но вот проблемы имеются. Почему все физические величины целые?
long int t, a, v0;
Вот тут переполнение запросто может быть. Да и как вы будете считать для времени, скажем, в 3.5 секунды?
Так что меняйте эти переменные на double, да и от pow в таком простом вычислении надо избавляться.
double t, a, v0;
....
s = (v0 + a * t/2.)*t;