c语言double几个零,C中的Double等于0问题

我正在实现一个算法来计算C中的自然日志.

double taylor_ln(int z) {

double sum = 0.0;

double tmp = 1.0;

int i = 1;

while(tmp != 0.0) {

tmp = (1.0 / i) * (pow(((z - 1.0) / (z + 1.0)), i));

printf("(1.0 / %d) * (pow(((%d - 1.0) / (%d + 1.0)), %d)) = %f\n", i, z, z, i, tmp);

sum += tmp;

i += 2;

}

return sum * 2;

}

如print语句所示,tmp最终确实等于0.0,但是循环继续.可能是什么导致了这个?

我在Fedora 14 amd64上并编译:

clang -lm -o taylor_ln taylor_ln.c

例:

$ ./taylor_ln 2

(1.0 / 1) * (pow(((2 - 1.0) / (2 + 1.0)), 1)) = 0.333333

(1.0 / 3) * (pow(((2 - 1.0) / (2 + 1.0)), 3)) = 0.012346

(1.0 / 5) * (pow(((2 - 1.0) / (2 + 1.0)), 5)) = 0.000823

(1.0 / 7) * (pow(((2 - 1.0) / (2 + 1.0)), 7)) = 0.000065

(1.0 / 9) * (pow(((2 - 1.0) / (2 + 1.0)), 9)) = 0.000006

(1.0 / 11) * (pow(((2 - 1.0) / (2 + 1.0)), 11)) = 0.000001

(1.0 / 13) * (pow(((2 - 1.0) / (2 + 1.0)), 13)) = 0.000000

(1.0 / 15) * (pow(((2 - 1.0) / (2 + 1.0)), 15)) = 0.000000

(1.0 / 17) * (pow(((2 - 1.0) / (2 + 1.0)), 17)) = 0.000000

(1.0 / 19) * (pow(((2 - 1.0) / (2 + 1.0)), 19)) = 0.000000

(1.0 / 21) * (pow(((2 - 1.0) / (2 + 1.0)), 21)) = 0.000000

and so on...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值