Método da Secante caindo em Looping infinito quando utilizo o módulo

Alguém me ajuda ? O programa entra em looping infinito quando coloco a função do Módulo


package metodosecante;


import javax.swing.*;


public class MetodoSecante {
    public static void main (String [] args){
    double a,b,c = -1, fa, fb, precisao;
    int interacoes;
    JOptionPane.showMessageDialog(null, "Função: F(x)= 2x - Cos(x) , Erro 0,001");
    a = Double.parseDouble(JOptionPane.showInputDialog("Insira o valor de X0"));
    b = Double.parseDouble(JOptionPane.showInputDialog("Insira o valor de X3"));
    precisao = Float.parseFloat(JOptionPane.showInputDialog("Insira a precisão"));
    fa = 2*a - Math.cos(a);
    fb = 2*b - Math.cos(b);
    if(fa < fb){
        JOptionPane.showMessageDialog(null, "Valores inválidos");
    }
    interacoes = 1;
    while (Math.abs(c) > precisao){
        c = b - fb*(b-a)/fb-fa;
     
        if (Math.abs(c) < precisao){
            JOptionPane.showMessageDialog(null, "A raiz é:" + c);
    }
        else{
            a = b;
            b = c;
            interacoes = interacoes + 1 ;
        }
        if (c < 0){
            c = c*-1;
        }
    }
    //JOptionPane.showMessageDialog(null, "A raiz é "+c+", obtida com "+interacoes+"interações" );
    }
}

Resolvido ! Se alguém tiver dúvida: http://pastebin.com/raBq6EYe