gpt4 book ai didi

C - pow() 奇怪的行为

转载 作者:太空宇宙 更新时间:2023-11-04 07:21:50 26 4
gpt4 key购买 nike

我在使用下面的代码时遇到了一个奇怪的问题,

 uint32 number = 1000000000;
number = number * pow(10, -9);
printf("number is %d\n", number);

我看到数字打印为“0”,而我预计数字为“1”。 任何人都可以指出可能导致这种情况的原因吗?这是在 MPC8248 平台上。

提前致谢。

mk

最佳答案

pow 返回一个 double ,对于 double ,您必须始终担心精度。乘积 number * pow(...) 可能不会返回 exactly 1。它可能是 0.99 或接近 1 但不完全是 1 的其他值。当这个值被分配回无符号整数 number 时,它会被降级为 int,并向下舍入为 0。

要解决这个问题,您始终可以使用整数实现自己的 pow 函数。不过,我建议使用 long 来实现,因为您的整数可能会很快溢出(例如 base = 50,exponent = 6 很容易超过通常分配给 int 的 32 位)。

查看 this SO question 的答案有关 pow 问题的更多详细信息。

等等,什么是精度?

许多数字不能用有限的二进制表示法来表示。 float 类型就是这样一种有限的二进制表示形式。 float 只能存储一定数量的信息位(您可以将其视为精度),因此任何不适合的位都会被丢弃。这种信息丢失是 float 可能出现此类错误的原因。您可以阅读更多相关信息 here .

关于C - pow() 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21057712/

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