program bisect
real(8) :: output
call bisection(3.d0,4.d0,1.d-10,output)
print*, output
end program bisect
subroutine bisection(a,b,error,result)
real(8):: a,b,error,c,result
logical:: proceed
proceed = .true.
do while (proceed)
if (sin(a)*sin(b).lt. 0.d0) then
c=(a+b)/2
if (sin(a)*sin(c).lt.0.d0) then
b=c
else
a=c
end if
else
stop 'cannot be bisected'
end if
if (abs(a-b).lt. error) then
proceed = .false.
end if
end do
result= a
end subroutine bisection
cHJvZ3JhbSBiaXNlY3QKcmVhbCg4KSA6OiAgb3V0cHV0CgpjYWxsIGJpc2VjdGlvbigzLmQwLDQuZDAsMS5kLTEwLG91dHB1dCkKcHJpbnQqLCBvdXRwdXQKZW5kIHByb2dyYW0gYmlzZWN0CgpzdWJyb3V0aW5lIGJpc2VjdGlvbihhLGIsZXJyb3IscmVzdWx0KQpyZWFsKDgpOjogYSxiLGVycm9yLGMscmVzdWx0CmxvZ2ljYWw6OiBwcm9jZWVkCnByb2NlZWQgPSAudHJ1ZS4KZG8gd2hpbGUgKHByb2NlZWQpCiAgICBpZiAoc2luKGEpKnNpbihiKS5sdC4gMC5kMCkgdGhlbgoJCWM9KGErYikvMgoJCWlmIChzaW4oYSkqc2luKGMpLmx0LjAuZDApIHRoZW4KICAgICAgICAgICAgYj1jCiAgICAgICAgZWxzZQogICAgICAgICAgICBhPWMKICAgICAgICBlbmQgaWYKCWVsc2UgCQoJCXN0b3AgJ2Nhbm5vdCBiZSBiaXNlY3RlZCcKICAgIGVuZCBpZiAKCiAgICBpZiAoYWJzKGEtYikubHQuIGVycm9yKSB0aGVuCiAgICAgICAgcHJvY2VlZCA9IC5mYWxzZS4KICAgIGVuZCBpZgplbmQgZG8KcmVzdWx0PSBhCmVuZCBzdWJyb3V0aW5lIGJpc2VjdGlvbg==