【问题标题】:its not printing proper no.of grid points on the screen?它没有在屏幕上打印正确的网格点数?
【发布时间】:2011-11-07 21:39:01
【问题描述】:
  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。请先生解释一下,自从一个月以来我一直在尝试它,但我没有得到正确的答案..

【问题讨论】:

标签: c s-maxage


【解决方案1】:

我并不完全清楚你的问题是什么,但你似乎对为什么 n 的值被打印为 101 感到困惑。冒着指出显而易见的风险,你在纯数学中所拥有的表达式为:

n = (1.0 / .01) + 1

1 除以 .01 等于 100。所以即使排除浮点错误的可能性,101 的答案也是正确的。由于floating point error,正在打印 20 的值(而不是“预期的”21)。如果你加上这个语句,你可以更清楚地看到这一点:

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

在我的机器上,它会打印:

19.999999701976780

转换为 int 会导致计算值的下限(当转换为整数值时,20.999... 最终为 20)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-06
    • 2022-01-23
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多