import java.util.*;
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
import javax.swing.*;
//============= Tanımı gereken fonksiyon ================

class fc extends f_x
{
public double func(double x)
{return x*x-2;}

}
//===========================================================

public class FSCO1B
{
	
public static double brent(f_x f,double a,double b)
{
// brent metodu ile kök değerini bulur
double test;
double p=0;
double es,ea;
double f1,f2,f3,fp;
int maxit=500,iter=0;
double tol=1.0e-15;
es=0.0000001;
double x1=a;f1=f.func(x1);
double x2=b;f2=f.func(x2);
double x3=(x1+x2)/2.0;f3=f.func(x3);
if(f1==0) return x1;
else if(f2==0) return x2;
else if(f3==0) return x3; 
if(f1*f2>0) System.out.println("verilen bölgede kök yok");
p=-(f2*f3*x1*(f2-f3)+f3*f1*x2*(f3-f1)+f1*f2*x3*(f1-f2))/((f1-f2)*(f2-f3)*(f3-f1));
fp=f.func(p);
ea=Math.abs(x3-p);
while((ea>es)&&(iter<maxit))
{	if(Math.abs(f3)<tol) return x3; 
    if((p<x1) && (p>x2)) 
    {p=(x1+x2)/2.0;    
     if(p>x3) {x1=x3;f1=f3;x3=p;f3=fp;}
     else if(p<x3) {x2=x3;f2=f3;x3=p;f3=fp;}
    }
    else
    {        
    if(p>x3) {x1=x3;f1=f3;x3=p;f3=fp;}
    else if(p<x3) {x2=x3;f2=f3;x3=p;f3=fp;}
    p=-(f2*f3*x1*(f2-f3)+f3*f1*x2*(f3-f1)+f1*f2*x3*(f1-f2))/((f1-f2)*(f2-f3)*(f3-f1));
    fp=f.func(p);
    ea=Math.abs(x3-p);
    }
    iter++;
} 
System.out.println("iter="+iter);
if(iter>=maxit) JOptionPane.showMessageDialog(null,"Uyarı maximum iterasyon sayısı aşıldı \n"+
   " çözüm geçerli olmıyabilir","MAKSİMUM ITERASYON SAYISI UYARISI",JOptionPane.WARNING_MESSAGE); 
return p;
}

     public static void main (String args[])  
     { 
	 fc f=new fc();
     double x1,x2,x3;
     x1=Double.parseDouble(JOptionPane.showInputDialog(" Fonksiyonun alt sınırını giriniz x1 : "));
     x2=Double.parseDouble(JOptionPane.showInputDialog(" Fonksiyonun ortaki bir değerini giriniz x3 : "));
     double r;
     r= brent(f,x1,x2);
     JOptionPane.showMessageDialog(null," kök değeri  : "+r+"\nFonksiyon değeri : "+f.func(r),
     "Brent yöntemiyle kök hesabı : ",JOptionPane.PLAIN_MESSAGE);
     System.exit(0);
     } 
}