我正在用C ++编写一个包含非常小的浮点数的程序。所以,我使用double
来表示数字。但是当浮点数乘以循环时,它会导致最终乘积为0.但我需要显示实际的浮点数。我该如何处理这些数字?
class myclass
{
private :
double value;
}
double calculate(count)
{
double key=this->value;
double prev_level=pow(2,level-1);
if(key-prev_level >=0)
key=key-prev_level;
int index= (2* key) + table[row_num][pos];
double num1=array_l1[index]; // array_l1 and array_l2 are of type double
double num2=array_l2[index];
std::pair<double,double> p = list[key].at(row_num);
double data=p.first;
prod1=num1 *data;
data=p.second;
prod2=num2 * data;
return prod1+prod2;
}
void compute()
{
double prod = 1;
for (int i = 0; i < count; i++)
{
myclass c1(count);
myclass c2(count+1);
double value= c1.calculate * c2.calculate();
}
}
由于尺寸的原因,我无法包含所有代码,但我希望此功能可以解释我面临的问题。随着count
的值增加,value
的值会减少。因此,对于count
的较大值,我得到0。
如何显示value
的实际值?
答案 0 :(得分:3)
浮点类型使用固定大小的表示。这有两个直接影响:
如果您需要更高的精度或更宽的范围,您将需要不同的表示。您可能需要查看What Every Computer Scientist Should Know About Floating-Point Arithmetic。
答案 1 :(得分:2)
首先检查您使用的是允许科学记数法的输出格式,而不仅仅是小数点后的固定位数。
如果仍然导致零输出,请考虑求和,而不是直接乘以数字。
例如,如果目标是比较产品的比率,则可以以对数完成计算,而无需进行指数化以返回非对数世界。
如果您只需要显示结果,请选择一个大常量。在进行求幂之前,将常量的对数加到总和中,并在显示中包含常量。