Y=1.QNan. C++ в чем может быть причина?

193
09 января 2019, 13:50

Попытался сделать задачу из интернета на If,Else. В итоге X выводится нормально,а Y с QNan. Перепробовал много вариантов,или Qnan или 0.В чем может быть причина? Сейчас вроде бы вышел правильный ответ,можете посмотреть,код правильный?

#include<stdio.h>
#include<math.h>
#include<tgmath.h>
int main ()
{
double z=cos(1.3);
float x;
int y;
    if (z<0)
{
x=(z+z)+tan(z);
y=sin(x)+log(x)+log(x);
printf("X=%f\nY=%e,x,y);
}
else if (0<=z<8)
{
    x=log(pow(z,4))+z+z;
    y=sin(x)+log(x)+log(x);
printf("X=%f\nY=%e",x,y);
    }
else if(z>8)
{
x=cos(z)+(z+z);
y=sin(x)+log(x)+log(x);
printf("X=%f\nY=%e",x,y);
}
getchar();
}
Answer 1

У вас y объявлен как int, а выводить вы его пытаетесь спецификатором %e. Непорядок! Если вы его выведите как %d, никакого NaN не будет.

Ну, а если вы его делаете double - дело другое. Смотрите, z у вас 0.27 примерно, так что x у вас получается отрицательным, так? а y при вычислении берет от x логарифм. А что такое логарифм от отрицательного числа? вот вы и получаете NaN...

И, кстати,

if (0<=z<8)

правильно записывается как

if (0<=z && z<8)

В целом я бы записал ваш код так:

double y,z=cos(1.3), x = 2*z;
if (z<0)
{
    x+=tan(z);
}
else if (z<8)
{
    x+=4*log(z);
}
else
{
    x+=cos(z);
}
y=sin(x)+2*log(x);
printf("X=%lf\nY=%lf\n",x,y);
READ ALSO
esc последовательность в cout

esc последовательность в cout

Этот код все делает правильно: очищает экран, и вывод с первой строки, первой позиции ячейки:

158
Thread.sleep() работает не так, как надо

Thread.sleep() работает не так, как надо

Пишу пошаговую 2D игру, где персонаж передвигается в строго заданном направлении по клеткам поляИспользую MouseListener

177
Чтение атрибутов из MANIFEST.MF

Чтение атрибутов из MANIFEST.MF

При компиляции Java приложения вписываются данные в MANIFESTMF файл которые потом должны использоваться при запуске приложения

187
Порядок фильтров в сервлетах без web.xml

Порядок фильтров в сервлетах без web.xml

Есть 3 фильтра: Filter1, Filter2, Filter3Каждый из них помечен аннотацией @WebFilter("/main")

158