C言語を用いて、以下のような二分法の計算を行いたいのですがうまくいかず困っているのでどう直せばよいかを教えてください。
1. arg1、arg2の初期値を0、π-atan(argf * C *R)とする。
2. arg1、arg2の中点をmとする。
3. 解が[arg1, m]と[m, arg2]のどちらの区間に存在するかを判定する。そのために、g(arg1) * g (m)の符号を見る。
4. g(arg1) * g (m) > 0 の場合解は[m, arg2]に存在し、
g(arg1) * g (m) < 0 の場合は[arg1, m]に存在する。
5. [m, arg2]に存在する場合arg1にmを代入し、
[arg1, m]に存在する場合arg2にmを代入する。
6. これにより、解の存在範囲が狭められたこととなる。狭まったかどうかは、区間の幅|arg1 - arg2|が微少幅δより小さくなったかどうかで判断する。ここでは、δ = 0.001とする。
7. |arg1 - arg2| > δ ならば、2~6の処理を再度行う、
|arg1 - arg2| < δ ならば、このときのmを解とする
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#define PI 3.141592653589
#define e 2.71828182846
double main(void){
double C = 0.00068;
double argf = 2*PI*50;
double R;
printf("抵抗値R ");
scanf("%lf", &R);
double f = argf*C*R;
double f1 = f*180/PI;
double x = atan(f1);
double arg2 = PI - x;
double arg1=0;
double k=1;
while(k>0.001){
double m=(arg2+arg1)/2;
double g=(pow(e,-(PI+arg1-m)/f))* sin(m)-sin(arg1);
double gm =(pow(e, -(PI+m-arg2)/ f))*sin(arg2)-sin(m);
double gg=g*gm;
if(gg>0){
arg1=m;
}else{
arg2=m;
}
double z=arg1-arg2;
double k=abs(z);
}
printf("θ1 %lf (rad) \n",arg1);
printf("θ2 %lf (rad)\n", arg2);
}