首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么C中的pow()函数在循环中是10的奇数指数时会给出错误的答案?

为什么C中的pow()函数在循环中是10的奇数指数时会给出错误的答案?
EN

Stack Overflow用户
提问于 2021-02-06 00:16:26
回答 3查看 194关注 0票数 3
代码语言:javascript
复制
#include <stdio.h> 
#include <math.h>

int main()
{
    int loop, place_value=0, c = 5;
    for(loop = 0; loop < c; loop++)
    {
        place_value = 0;
        place_value = pow(10, loop);
        printf("%d \n", place_value);
    }
    return 0;
}

这段代码给出了

代码语言:javascript
复制
10 
99 
1000 
9999 

为什么第三行和第五行是99和9999,而不是100和10000?

当正常请求电源时,它会给出正确的答案。

代码语言:javascript
复制
#include <stdio.h>
#include <math.h>

int main()
{
  printf ("%d", (int) pow (10,3 ));
  return 0;
}
代码语言:javascript
复制
1000
EN

Stack Overflow用户

发布于 2021-02-06 01:17:56

经验法则:永远不要使用带整数的浮点函数(特别是像pow或log这样的复杂函数)。

简单地实现整数次幂

代码语言:javascript
复制
unsigned intpow(unsigned x)
{
    unsigned result = 1;
    while(x --) result *= 10;
    return result;
}

它会快得多,甚至(最快的)

代码语言:javascript
复制
int intpow1(unsigned x)
{
    const static unsigned vals[] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, /* ... */};

    #if defined(CHECK_OVERFLOW)
    if(x >= sizeof(vals)/ sizeof(vals[0])) return -1;
    #endif

    return vals[x];
}
票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66066756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档