не печатать правильное количество точек сетки на экране? - PullRequest
0 голосов
/ 15 декабря 2010
  int n,m;           
   float S,K,R,L,dr,dz;
   S=4.0f;
   K=2.0f;
   R=1.0f;
   L=2.0f;
   dr=0.01f;
   dz=0.1f;
   n=int((R/dr)+1);
   m=int((L/dz)+1);
   printf("%d\t%d\t",n,m);

для этого iam получается 10,20 точек сетки, но на самом деле значение должно быть 11,21 для n, m rply и для dr = 0,01 его печать n = 101, за исключением этого все остальные значения 'dr' it printна одно значение меньше, чем для dr = 0,1 n = 10, dr = 0,001 n = 1000, но фактическое значение равно 1001. Пожалуйста, объясните мне, сэр, я пробовал это с тех пор, как один месяц я все еще не получил правильный ответ.

1 Ответ

0 голосов
/ 15 декабря 2010

Мне не совсем понятно, каков ваш вопрос, но вы, кажется, не понимаете, почему значение n печатается как 101. С риском указать очевидное, что вы имеете в чисто математическом Выражение:

n = (1.0 / .01) + 1

1, деленное на 0,01, равно 100. Таким образом, даже если исключить возможность ошибки с плавающей запятой, ответ 101 будет правильным. Печатается значение 20 (а не «ожидаемое» 21) из-за ошибка с плавающей запятой . Вы можете увидеть это более четко, добавив следующее утверждение:

printf( "%.15f\n", L / dz );

На моей машине это печатается так:

19.999999701976780

Приведение к int приводит к вычислению минимального значения (20.999 ... заканчивается как 20 при приведении к целочисленному значению).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...