C - pow 函数意外行为

标签 c

这是一个查找位数的程序。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main() {
    int i = 0, n;
    printf("Enter number: ");
    scanf("%d", &n);
    while ((n / pow(10, i)) != 0) {
        i++;
    }
    printf("%d", i);
}

该程序在任何输入上都给出 309 作为输出(i 的值)。但是,如果我将 pow(10, i) 的值存储在另一个变量中并将其放入 while 循环中,我会得到正确的输出。请帮忙!

最佳答案

C++ 在进行计算或求值时使用最精确的类型(当类型混合时),在这里您可以有效地将 double 与 int 混合。您正在将用户输入的数字除以一个非常大的指数数。

理论上,无论除数有多大,它永远不会为零。所以,理论上的结果应该是无限的。然而,由于 double (由 pow 返回)的限制,它最终仍将接近于零。

如果将 pow 的返回值存储在整数中,您将不再混合类型,并且将有效地计算出位数或以 10 为底的近似对数(任何整数除以更大的整数将等于零) )。

关于C - pow 函数意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35394322/

相关文章:

c - 关闭特定函数的 DEBUG 宏 (NDEBUG)

c - 编译器语法中if then else的翻译

c - 为什么 stdout 重定向适用于 put 而不是 write?

c++ - 通过引用内联函数传递 __m128i 对象会导致这些对象移动到堆栈吗?

python - 路径不能包含斜杠

c - 使用 MPI 收集和组织 vector

c - 大写转换和数字求和

c++ - gcc:使用另一个目录中的函数

c - 将 int 的每个数字分配给 int 数组

c - 函数 idr_alloc(...) 有时会失败并出现错误 -EINVAL(-22)