我正在设置一个迭代函数,它调用另一个函数来做一些微积分,然后在它最终收敛时找到值。但是它陷入了一个错误,说这是一个分段错误(核心转储)。
下面是我的代码:
#include <iostream>
#include <string>
#include <stdlib.h>
#include <cmath>
#include <stdio.h>
using namespace std;
double calcular(int numero)
{
return 1.0555 - (0.24366 * (numero - 0.0555) / (numero * (numero + 0.0555)));
}
double iterar(int hola)
{
if (abs(calcular(hola) - hola) > 0.002)
{
hola = calcular(hola);
iterar(hola);
}
else
return hola;
}
int main()
{
cout << iterar(1);
return 0;
}发布于 2019-05-23 14:10:14
double calcular(int numero)
{
return 1.0555 - (0.24366 * (numero - 0.0555) / (numero * (numero + 0.0555)));
}
double iterar(int hola)
{
if (abs(calcular(hola) - hola) > 0.002)
{
hola = calcular(hola);
iterar(hola);
}
else
return hola;
}应该是
double calcular(double numero)
{
return 1.0555 - (0.24366 * (numero - 0.0555) / (numero * (numero + 0.0555)));
}
double iterar(double hola)
{
if (abs(calcular(hola) - hola) > 0.002)
{
hola = calcular(hola);
return iterar(hola);
}
else
return hola;
}因为您正在将分数值传递给calcular。分割错误当numero < 1时,它将取0,并且(numero * (numero + 0.0555))将变为0。
https://stackoverflow.com/questions/56268865
复制相似问题