При тестировании уравнения я получаю -1.#IND00
как ответ, когда он решает для y
. Я в основном пытаюсь создать программу, которая решает для y
дать уравнение ниже
у = у /(3/17) -z + х/(а% 2) +PI
#include <stdio.h>
#include <math.h>
#define PI 3.14
int main (void)
{
int a=0;
double z=0,x=0,y=0;
printf("Values for x, z, and a:");
scanf("%lf%lf%d", &x,&z,&a);
y = (((y/(double)(3/17)))-z + (x/(a%2))+PI);
printf("y = %lf\n", y);
return 0;
}
Поскольку вопросов нет, я предполагаю, что вопрос: "Как вы пишете программу C++, которая решает это уравнение?"
C++ - это язык программирования и сам по себе не способен решить ваше уравнение, т.е. C++ не будет преобразовывать ваше уравнение, чтобы получить его в форме, где y
встречается только на левой стороне, а все параметры на Правая сторона. Вы должны преобразовать его самостоятельно, вручную или с помощью решателя.
Что происходит в опубликованном коде?
Позволяет начинать в самой левой части уравнения y/(double)(3/17)
изнутри наружу в соответствии с круглыми скобками:
3/17
интерпретируется как целочисленное деление, что приводит к 0
;(double)(0)
отличает целое число 0
в double от 0.0
;y/0.0
- это деление на 0, как объясняется в этом сообщении, что приводит к вашей ошибке. Вы можете исправить это, как указано в комментариях, либо лидируя первое целое число (double)3/17
либо превращая целое число 3
в double 3.0
или используя static_cast
.
y
все еще инициализируется до 0, поэтому y/(double)3/17
равно 0
а вычисленное уравнение в основном -z + x/(a%2) + PI
.Итак, если вы не преобразуете уравнение и не превратите преобразованное уравнение в код, вы не получите ожидаемых результатов.
(double)(3/17)
слишком поздно, чтобы что-либо изменить. Вы хотите разыграть перед делением - или просто написать3.0
.static_cast
поверх бросков в стиле C. также проверьте возвращаемое значениеscanf
чтобы убедиться, что вы прочитали 3 допустимых значения