分段故障(堆芯)迭代功能

时间:2019-05-23 05:58:29

标签: c++

我正在设置一个迭代函数,该函数调用另一个函数进行演算,然后在最终收敛时找到该值。但是它陷入一个错误,指出这是一个分段错误(核心已转储)。

这是我的代码:

#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;
}

1 个答案:

答案 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。