c++ при вычислении выражения ошибка Divide by Zero or Overflow Error. Почему?

интернет программирование информация с++

#include <iostream.h>
#include<math.h>
void main(){
int x, y, s, a, b, d, e; // opisanija.
cout<< "vvedite x i y\n";
cout<< " i nazmi enter\n";
cin>>x>> y; //vvod 4isel
a = 2*cos(x-1/6);
d = 1/(abs((x^2)/(y+(x^3))));
b = 1/2+(sin(y)*sin(y));
e = (a/b)-d;
s = ((2*cos(x-1/6))/(1/2+(sin(y)*sin(y))))+(1/(abs(((x)^2)/(y+(x^3)))));
cout<<"s="<<s; // vivod resulta
}
ввожу простые числа типа 0,1, 0.5
и эта ошибка

Примечание:
исправил. ошибка только при вычислении результата

Примечание:
не катит
Ответы:
Divide by Zero - Деление на 0.
используйте pow из <Math.h>... а не ^ (по-моему это вообще "исключающее или", если не изменяет память... и тут понятное дело на выходе могут нули появляться где не лень).
И учтите: pow возвращает double, поэтому лучше исправьте тип переменных на оный. Тем более у вас тут куча операций, которые возвращают числа с плавающей точкой. Если пользоваться целочисленным типом, то будет огромнейшая потеря точности.
Строка b = 1/2+(sin(y)*sin(y));
1) 1/2 ровно 0
2) sin(y)*sin(y) от 0 до 1
3) когда Вы это присвоете b, b будет равно 0
4) в следующей строке Вы делете на b
SKYDOS опередил )))
SKYDOS прав, т.к. происодит вычисление тригонометрических фунцкций, нужно использовать не int, а вещественный тип. А так у Вас после ввода чисел 0, 1, 0.5 в x и y записывается 0 (т.к. int!!!) и при вычислении d происходит сбой. Либо он происходит в вычислении e, где идет деление на b. Дело в том, что пока все аргументы типа int результаты каждой элементарной операции с ними сохраняются также в типе int! Следовательно, синус y всегда равен нолю, и синус квадрат тоже, и 1/2+Sin2 тоже равен нолю. Вот этот сбой 100% имеет место быть. Так что все переменные, в том числе и x с y должны быть вещественные
замени s = ((2*cos(x-1/6))/(1/2+(sin(y)*sin(y))))+(1/(abs(((x)^2)/(y+(x^3))))); на s = ((2*cos(x-1/6))/(1/2+(sin(y)*sin(y))))+(1/(abs((x*x)/(y+(x*x*x)))));
между #include и <math.h> нужно ставить пробел)


15 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.