1-1/2+1/3-1/4+…+1/99-1/100将结果输出,该怎么处理

1-1/2+1/3-1/4+……+1/99-1/100将结果输出
#include<stdio.h>
void main()
{
 float sum=1.0,t,s=1;
 int i;
 for(i=1;i<=100;i++)
 {
  t=s/i;
  sum=sum+t;
  s=-s;
 }
 printf("1-1/2+1/3-1/4+……+1/99-1/100=%5.4f\n",sum);
}
为什么运行结果是1-1/2+1/3-1/4+......+1/99-1/100= inf

------解决方案--------------------
C/C++ code
// 1-1/2+1/3-1/4+......+1/99-1/100=
#include <stdio.h>
void main() {
    double sum=0.0,t,s=1.0;
    int i;

    for (i=1;i<=100;i++) {
        t=s/(double)i;
        sum=sum+t;
        s=-s;
        printf("%d %.15lg\n",i,sum);
    }
    printf("1-1/2+1/3-1/4+……+1/99-1/100=%.15lg\n",sum);
}
//1 1
//2 0.5
//3 0.833333333333333
//4 0.583333333333333
//5 0.783333333333333
//6 0.616666666666667
//7 0.759523809523809
//8 0.634523809523809
//9 0.745634920634921
//10 0.645634920634921
//11 0.736544011544012
//12 0.653210678210678
//13 0.730133755133755
//14 0.658705183705184
//15 0.72537185037185
//16 0.66287185037185
//17 0.721695379783615
//18 0.66613982422806
//19 0.718771403175428
//20 0.668771403175428
//21 0.716390450794476
//22 0.67093590533993
//23 0.714414166209495
//24 0.672747499542829
//25 0.712747499542829
//26 0.67428596108129
//27 0.711322998118327
//28 0.675608712404042
//29 0.710091471024731
//30 0.676758137691398
//31 0.709016202207527
//32 0.677766202207527
//33 0.708069232510557
//34 0.678657467804675
//35 0.707228896376103
//36 0.679451118598326
//37 0.706478145625353
//38 0.680162356151668
//39 0.705803381792694
//40 0.680803381792694
//41 0.705193625695133
//42 0.681384101885609
//43 0.704639915839098
//44 0.681912643111825
//45 0.704134865334047
//46 0.682395734899265
//47 0.703672330643946
//48 0.682838997310612
//49 0.703247160575918
//50 0.683247160575918
//51 0.702855003713173
//52 0.683624234482404
//53 0.702492159010706
//54 0.683973640492187
//55 0.702155458674006
//56 0.684298315816863
//57 0.701842175465985
//58 0.684600796155641
//59 0.701549948698013
//60 0.684883282031347
//61 0.701276724654297
//62 0.685147692396233
//63 0.701020708269249
//64 0.685395708269249
//65 0.700780323653864
//66 0.685628808502349
//67 0.700554181636677
//68 0.685848299283736
//69 0.700341052906925
//70 0.68605533862121
//71 0.700139845663464
//72 0.686250956774575
//73 0.699949586911561
//74 0.686436073398048
//75 0.699769406731381
//76 0.686611511994539
//77 0.699598524981552
//78 0.686778012161039
//79 0.69943624000914
//80 0.68693624000914
//81 0.699281919021486
//82 0.687086797070267
//83 0.699134989841351
//84 0.687230227936589
//85 0.698994933818942
//86 0.687367026842198
//87 0.698861279715761
//88 0.687497643352125
//89 0.698733598408304
//90 0.687622487297193
//91 0.698611498286204
//92 0.687741933068813
//93 0.698494621240856
//94 0.687856323368516
//95 0.698382639157989
//96 0.687965972491323
//97 0.698275250841838
//98 0.688071169209185
//99 0.698172179310195
//100 0.688172179310195
//1-1/2+1/3-1/4+……+1/99-1/100=0.688172179310195

------解决方案--------------------
精度问题

#include<stdio.h>
#include<stdlib.h>
int main()
{
double sum=0.0, temp=0.0; 
int i, sign;

i = 1;
while(i<101)
{
sign = ((i%2) == 0? 1:-1);
int mom = i%2;
temp = 1.0/i*sign;
sum += temp;
printf("%lf\n", sum);
i++;
}
printf("sum = %lf\n",sum);
return 0;
}
问题在这个地方:
我们知道对于整形的除法运算永远是整形
即 3/2=1 7/3=2 1/2=0
所以当i=1时 1/1=1, temp=1, sum=1
当i>=2时候 1/i=0 ,temp=1, sum=1.
由此可知是精度上出了问题,解决的方案是
使用高精度数据类型 即 1.0/2 =0.5 
1.0默认的是double类型 问了ok了

------解决方案--------------------
#include<stdio.h>
void main()