0
  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 个网格点,但实际上 n,m rply 的值应该是 11,21,对于 dr=0.01,它的打印 n=101 除了这所有其他的“dr”值之外,它打印的值比 dr 少一个=0.1 n=10 ,dr=0.001 n=1000 但实际值​​为 1001。请先生解释一下,自从一个月以来我一直在尝试它,但我没有得到正确的答案..

4

1 回答 1

0

我并不完全清楚您的问题是什么,但您似乎对为什么将 的值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)。

于 2010-12-15T13:58:02.297 回答