pQB*_*pQB 2 c++ floating-point casting
我在我编写的一段代码中发现了一个奇怪的行为,当我尝试从程序中重现它时(即使用MATLAB),这种行为不会发生.
我正在对数组进行如下操作:
a[i] = a[i] / (sqrt(b[i]) * sqrt(c[i]));
Run Code Online (Sandbox Code Playgroud)
其中a,b和c是float类型的阵列.的值a,b和c来自先前分割范围2000到6000000
对于数组的所有元素,操作的结果为零,但是分别查看分子和分母的值,对于给定元素,操作89509.0 / 90240,375等于0,991895258.
所以,我想知道为什么使用float的程序中的完整操作不起作用,并且它按预期单独工作.可能是因为几个小时的混淆调试?
当我遇到类似的情况时,我发现通常有助于将其分解为步骤并查看哪些步骤正常,哪些步骤不正常.例如,为此,它可以分解为以下内容:
float sqrtb = sqrt(b[i]);
float sqrtc = sqrt(c[i]);
float divisor = srqtb * sqrtc;
float dividend = a[i];
float quotient = dividend / divisor;
a[i] = quotient;
Run Code Online (Sandbox Code Playgroud)
现在我可以浏览每个项目并查看它失败的位置(如果失败).事实是,当我这样做时,我经常在创建步骤时发现问题,然后修复它.
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |