我正在设置一个迭代函数,该函数调用另一个函数进行演算,然后在最终收敛时找到该值。但是它陷入一个错误,指出这是一个分段错误(核心已转储)。
这是我的代码:
#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;
}
答案 0 :(得分:0)
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。