gpt4 book ai didi

c++ - Long double 溢出但值小于最大可表示值

转载 作者:行者123 更新时间:2023-11-30 01:40:36 28 4
gpt4 key购买 nike

我正在尝试使用 C++ 计算一个序列。该系列是:
series (对于那些想知道的人)

我的代码如下:

#include <iostream>
#include <fstream>
#include <cmath> // exp
#include <iomanip> //setprecision, setw
#include <limits> //numeric_limits (http://en.cppreference.com/w/cpp/types/numeric_limits)

long double SminOneCenter(long double gamma)
{
using std::endl; using std::cout;
long double result=0.0l;
for (long double k = 1; k < 1000 ; k++)
{
if(isinf(pow(1.0l+pow(gamma,k),6.0l/4.0l)))
{
cout << "infinity for reached for gamma equals: " << gamma << "value of k: " << k ;
cout << "maximum allowed: " << std::numeric_limits<long double>::max()<< endl;
break;
}

// CAS PAIR: -1^n = 1
if ((int)k%2 == 0)
{
result += pow(4.0l*pow(gamma,k),3.0l/4.0l) /(pow(1+pow(gamma,k)),6.0l/4.0l);
}
// CAS IMPAIR:-1^n = -1
else if ((int)k%2!=0)
{
result -= pow(4.0l*pow(gamma,k),3.0l/4.0l) /(pow(1+pow(gamma,k)),6.0l/4.0l);

//if (!isinf(pow(k,2.0l)*zeta/2.0l))
}
// cout << result << endl;
}


return 1.0l + 2.0l*result;
}

输出将是,例如 gamma = 1.7 : Gamma 达到无穷大等于:1.7 k 的值:892

long double 可以表示的最大值,由 STL numeric_limits 提供,是:1.18973e+4932

但是 (1+1.7^892)= 2.19.... × 10^308 远低于 10^4932,所以不应该被视为无穷大。

假设我的代码没有错(但很可能是错的),谁能告诉我为什么讨论的代码在不应该的情况下求值为无穷大?

最佳答案

您需要使用 powl而不是 pow如果你想供应long double参数。

目前您正在点击 numeric_limits<double>::max()在你的pow电话。

作为替代方案,请考虑使用 std::pow它有适当的重载。

引用 http://en.cppreference.com/w/c/numeric/math/pow

关于c++ - Long double 溢出但值小于最大可表示值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42908181/

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