gpt4 book ai didi

c - 浮点加法/乘法/除法

转载 作者:太空宇宙 更新时间:2023-11-04 02:42:54 28 4
gpt4 key购买 nike

我正在做课本中的一些家庭作业,并且有一些关于某些算术运算的浮点舍入/精度的问题。

如果我像这样从 int 中转换 double :

int x = random();
double dx = (double) x;

假设变量 yzdydz 遵循相同的格式。

然后会像这样的操作:

(dx + dy) + dz == dx + (dy + dz)
(dx * dy) * dz == dx * (dy * dz)

联想?我知道如果我们有小数表示,那么它就不会是关联的,因为舍入会导致一些精度丢失,具体取决于哪些操作数相互相加/相乘。但是,由于这些是从 int 转换而来的,我觉得精度不会有问题,而且它们可以关联吗?

最后,我使用的教科书根本没有解释 FP 除法,所以我想知道这个说法是否正确,或者至少浮点除法的一般工作原理:

dx / dx == dz / dz

我在网上查过这个,我在某些领域读到过像 3/3 这样的运算可以产生 .999...9 但没有足够的信息来解释这是怎么发生的或者它是否会随着其他除法运算而变化.

最佳答案

假设 int 最多为 32 位,并且 double 遵循 IEEE-754。 double 最多可以精确存储 253 的整数值。


在加法的情况下:

(dx + dy) + dz == dx + (dy + dz)

== 的两边都有它们的精确值,所以它是关联的。


在乘法的情况下:

(dx * dy) * dz == dx * (dy * dz)

有可能超过253,所以不保证它们相等。

关于c - 浮点加法/乘法/除法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30090897/

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