gpt4 book ai didi

C - pow 函数意外行为

转载 作者:行者123 更新时间:2023-11-30 15:11:51 25 4
gpt4 key购买 nike

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

这是我的代码:

#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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com