gpt4 book ai didi

c - 为什么 pow(n,2) 在 n=5 时使用我的编译器和操作系统返回 24?

转载 作者:太空狗 更新时间:2023-10-29 16:25:17 25 4
gpt4 key购买 nike

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

int main()
{
int n,i,ele;
n=5;
ele=pow(n,2);
printf("%d",ele);
return 0;
}

输出是24

我在 Code::Blocks 中使用 GNU/GCC。

发生了什么事?

我知道 pow 函数返回一个 double ,但是 25 适合一个 int 类型,所以为什么这段代码打印一个 24 而不是 25?如果n=4; n=6; n=3; n=2; 代码有效,但对于 5 个则无效。

最佳答案

这是这里可能发生的事情。您应该能够通过查看编译器对 pow 函数的实现来确认这一点:

假设你有正确的#include's,(之前所有关于这个的答案和评论都是正确的——不要认为 #include 文件是理所当然的),标准 pow 函数是这样的:

double pow(double, double);

并且您正在这样调用 pow:

pow(5,2);

pow 函数通过算法(可能使用对数),因此使用浮点函数和值来计算幂值。

pow 函数不会天真地“将 x 的值乘以 n 次”,因为它还必须使用小数指数计算 pow,并且你不能那样计算分数幂。

很可能,使用参数 5 和 2 计算 pow 会导致轻微的舍入误差。当您分配给 int 时,您截断了小数值,因此产生 24。

如果您使用的是整数,您不妨编写自己的“intpow”或类似函数,将值简单地乘以所需的次数。这样做的好处是:

  1. 您不会遇到使用 pow 可能会出现细微舍入错误的情况。

  2. 您的 intpow 函数很可能比对 pow 的等效调用运行得更快。

关于c - 为什么 pow(n,2) 在 n=5 时使用我的编译器和操作系统返回 24?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25678481/

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