(* Zgodnie z poleceniem funkcja przyjmuje 4 argumenty:
f -> funkcja dla której będziemy rozwiązywali równanie f[x]=0 

UWAGA: w Mathematice funkcje mogą być przekazywane jako argumenty; dla przypomnienia: Sin, Cos, Tan, Exp, Log, ( 1/# &), Function[{x}, x^2] są czystymi funkcjami; 

wyrażenie typu Sin[x] lub x^2 NIE JEST FUNKCJĄ !!!!

x1 -> lewy koniec przedziału w którym spodziewamy się rozwiązania
x2 -> prawy koniec przedziału w którym spodziewamy się rozwiązania
ϵ -> wymagana dokładność (czyli długość przedziału) 
*)

bisect[f_,x1_,x2_,ϵ_]:= (* nazwą funkcji będzie bisect *)

(* nagłówek Module pozwala na deklarowanie zmiennych ,,wewnętrznych'', tj. widocznych tylko dla operacji wykonywanych wewnątrz *)
Module[
{iter=0,left=x1,right=x2,x},(* inicjalizacja zmiennych wewnętrznych; wykonywana tylko jeden raz *)

While[Abs[left-right]>ϵ,(* pętla While wykonuje się jeżeli warunek podany jako pierwszy argument jest prawdziwy; Abs to wartość bezwzględna  *)
iter=iter+1;(* za każdym razem zwiększamy licznik o jeden, inaczej iter++ *)
x=(left+right)/2; (* wzór na środek przedziału *)
If[f[x]>0,right=x,left=x]; (* Instrukcja warunkowa: jeżeli f[x] jest większe od zera to right=x; w przeciwnym wypadku left=x*)

];(* koniec pętli While *)

Print["Rozwiązanie o dokładności absolutnej ϵ = ",ϵ," znajduje się w przedziale\t",left," < x < ",right," o szerokości Δx = ",right-left,"\n"]; (* wypisanie informacji diagnostycznych *)

Return[x](* wartością funkcji jest przybliżone rozwiązanie *)

](* koniec Module *)

(* koniec funkcji bisect ! *)

Przykładowe wywołania funkcji:

rozwiazanie=bisect[Function[{x},Cos[x]],4.0,5.0,0.01];

rozwiazanie

bisect[Cos,4.0,5.0,0.0001];

bisect[Cos[#]&,4.0,5.0,0.0001];

Analogiczne wywołanie FindRoot:

FindRoot[Cos,{4,5},PrecisionGoal->3,PrecisionGoal->Infinity,AccuracyGoal->1]