gpt4 book ai didi

c++ - 赋值后 Long double 重置为 0

转载 作者:太空宇宙 更新时间:2023-11-04 06:21:46 25 4
gpt4 key购买 nike

我一直在用 C/C++ 修改一些疾病模型,并希望从中获得更高的精度。我考虑过使用 long double,以获得 80 位精度(我使用的是 cygwin 的 GCC 4.8.3),但在用它进行计算后,我得到了一个“nan”(不是数字)输出值。这是我正在使用的代码。所有变量都是长 double 。

#include <cstdlib>
#include <iostream>
#include <cstdio>
#include <ctime>
#include <random>
#include <omp.h>
#include <cfloat>



using namespace std;

int
main ( int argc, char** argv )
{

long double S, E, I, R, V, dS, dE, dI, dR, dV;
long double a, b, g, t, c, d, e, f;
long double dt = .005, tmax = 365;

S = 318000000;
I = 1;
E = 0;
R = 0;
V = 0;

FILE* F;

F = fopen ( "valoresSIR1.txt", "w+" );
//fprintf ( F, "Tempo, Susceptivel, Incubado, Infectado, Recuperado, Vacinado\n" );

a = 0.000005;
b = 0.01;
c = 0.05;
d = 0.000034;
e = 0.00000;
f = 0.0;
g = 0.000000;
t = 0.0000;

//printf("%Lg", a); exit(0);
for ( long double i = 0; i < tmax; i += dt )
{
dS = ( - a * I * S - g + t * R + d * ( S + E + R + V ) - f * S ) * dt;
dE = ( a * I * S - c * E - g ) * dt;
dI = ( c * E - g - e * I - b * I ) * dt;
dR = ( b * I - g - t * R ) * dt;
dV = ( f * S - g ) * dt;


S += dS;
E += dE;
I += dI;
R += dR;
V += dV;

//printf ( "%Lg, %Lg, %Lg, %Lg, %Lg, %Lg\n", S, E, I, R, V );
std::cout.precision (50);
std::cout << S << std::endl;
exit ( 0 );
fprintf ( F, "%Lg, %Lg, %Lg, %Lg, %Lg, %Lg\n", i, S, E, I, R, V );
switch ( ( int ) i )
{
case 0: std::cout << i << endl;
break;
case 100: std::cout << i << endl;
break;
case 200: std::cout << i << endl;
break;
case 300: std::cout << i << endl;
break;
case 4000: std::cout << i << endl;
break;
case 5000: std::cout << i << endl;
break;
case 6000: std::cout << i << endl;
break;
case 7000: std::cout << i << endl;
break;

}

}

fclose ( F );

return 0;
}

输出的预期值:http://pastebin.com/mJqkSVUf

最佳答案

计算 dS = ( - a * I * S - g + t * R + d * ( S + E + R + V ) - f * S ) * dt; 使用未初始化的变量 V。这会导致未定义的行为。

当未定义的行为发生时,任何事情都可能发生。在您的情况下,它表现为 nan 是涉及 V 的操作的结果。

关于c++ - 赋值后 Long double 重置为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33662662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com