如何解决数值异常

时间:2019-07-19 13:13:35

标签: c++ double fixed scientific-notation

我想编写一个程序,以解决一些电信公式,例如friis方程和有关无线电波传输的其他公式。因此,在此计算中,我必须使用非常大和非常小的数字。看这个基本公式,周期= 1 /频率。假设频率大约为GHz(大数),周期会很小,我很难打印这些数字。我的C ++手册(自学成才)说,这个问题称为数字异常。我知道double在该点后有15-17位数字(但是如果我执行该程序,它不会显示所有数字,而只有6位(固定))。如果我希望看到其他数字,则必须使用科学。有没有办法获得全数字的数字(固定的)?然后我还有其他问题,例如如果我将两个数字加起来(1 + 0.0000001),我想得到1.0000001,但是我得到1.000000。我应该使用setprecision()吗?我错了吗?我该如何解决这个问题?

#include<iostream>
#include <iomanip>

using namespace std;

int main()
{
double f_GHz = 4.5e9, T = 0.0;          // frequency = 4.5 GHz
double a = 1;
double b = .0000001;


T = 1 / f_GHz;                              

cout << "Using fixed, period is equal to:\t" << fixed << T << endl
    << "Using scientific, period is uqual to:\t" << scientific << T << "\n\n\n";

cout << "Using fixed, a+b is equal to:\t\t" << fixed << a + b << endl
    << "Using scientific, a+b is equal to:\t" << scientific << a + b << endl;

return 0;
}

0 个答案:

没有答案