小弟最近学习使用C++编程,在编程过程中子函数里遇到一个数量级为e-19的小数,方程里的参数数值类型都为long double,方程里所有参数的值都是正确的,但是方程无法计算初正确结果,有哪位大神可以指点一下让代码运行出正确结果,代码和运行结果如下
#include <iostream>
#include "math.h"
int main(void)
{
long double z0, ax, ay, y0 ,delta_i, delta_e, y1, y2,ro,ri,d;
ax = 3.274562789467620e-4;
ay = 1.071061271913181e-3;
z0 = 9.355885717696390e-5;
y0 = 3.060172456885287e-4;
ri = 8.800000608712444e-3;
ro = 8.320000090002999e-3;
d = 1.600000075995922e-2;
y1 = 0;
y2 = 0;
delta_e = sqrtl((z0*1e8 - y1 * 1e8)*(z0*1e8 - y1* 1e8) + (y0*1e8 + y2 * 1e8)*(y0*1e8 + y2 * 1e8));
delta_e = delta_e / 1e8 - (ro - 0.5*d);
delta_i = sqrtl((ax *1e8 - z0 *1e8 + y1 * 1e8)*(ax *1e8 - z0 *1e8 + y1 * 1e8) + (ay*1e8 - y0 *1e8 - y2 * 1e8)*(ay*1e8 - y0*1e8 - y2 * 1e8));
delta_i = delta_i / 1e8 - (ri - d *0.5);
}
为什么delta_e的结果是正确的,而delta_i的结果却是0?
而且将delta_e计算中的参数与别的数量级的数比如1e10 而不是1e8相乘 的话那delta_e的结果也不正确。
希望能够实现结果
附正确结果:delta_e=5.421010862427522e-20
delta_i=1.084202172485504e-19