0

Ниже есть код, в котором выводится значение р= -6.08999999999999985789, а мне надо чтобы выводило -6.09, и да я знаю что оно выведет то что мне надо если заменю 20 на просто 2, но в ячейке память будет держать то длинное число и из-за этого цикл не срабатывает 10 раз Как это сделать?

#include
#include
#include
#define a 8.3
#define b 1.43
#define xfinish -4.74
#define deltx 0.15
#define N 10

int main() { double p, d, xstart, step;

xstart=-1((N-1)deltx-(xfinish)); printf("%.2f", xstart);

for( p = xstart; p <= xfinish; p += deltx ) { printf("Значение аргумента p= %.20lf\n", p); d=pow(2, -p)(sqrt(labs(p+pow(labs((p-a)), 1/4.))(exp(b)))); printf("Значение d=%.2f\n", d); } return 0; }

1 Answers1

1

6.09 не представимо в виде double точно в силу ограничений чисел с плавающей точкой. Если вам надо ровно 10 выполнений — лучше всего стройте цикл на основе целых чисел.

int main()
{
    double p, d, xstart, step;
xstart=-1*((N-1)*deltx-(xfinish));
printf(&quot;%.2f\n&quot;, xstart);

p = xstart;
for(int i = 0; i &lt; N; ++i)
{
    printf(&quot;Значение аргумента p= %.20lf\n&quot;, p);
    d=pow(2, -p)*(sqrt(labs(p+pow(labs((p-a)), 1/4.))*(exp(b))));
    printf(&quot;Значение d=%.2f\n&quot;, d);
    p += deltx;
}
return 0;

}

См. https://ideone.com/dQHFPe

Harry
  • 221,325