gpt4 book ai didi

c - 算术规则是否适用于 C 中的加法?

转载 作者:行者123 更新时间:2023-12-04 10:28:12 27 4
gpt4 key购买 nike

我是 C 的新手,我很难理解这些 Material 。我真的需要帮助!请有人帮忙。

在算术中,任何两个正整数之和都大于:

(n+m) > n for n, m > 0
(n+m) > m for n, m > 0

C 有一个加法运算符 +。这个算术规则在 C 中成立吗?

我知道这是错误的。但是请有人向我解释为什么会这样,我能理解吗?请提供反例?

先感谢您。

最佳答案

我的简短搜索没有显示描述这些的好答案,所以我宁愿尝试在这里为初学者很好地回答这个问题。

答案当然是错误的,但为什么呢?

整数

在 C 或任何提供某种整数类型的编程语言中,这种类型在数学意义上并不意味着它。在数学意义上,非负整数的范围从 0 到无穷大。然而,计算机只有有限的存储空间,因此整数必然被限制为小于无穷大。

仅此一项就证明 a + b > aa + b > b 不可能一直为真,因为它可以设置为 ab 都小于计算机在其存储中可以表示的最大数字,但 a + b 大于此值。

这里究竟发生了什么,取决于。有些人提到了环绕,但事实并非如此。 C 语言首先将整数溢出定义为一种未定义的行为,如果代码碰巧踩到它,则可能发生任何事情,包括火和烟(当然在现实中不会发生,但严格解释标准它可以,以及违反时空连续体)。

我不会在这里描述环绕是如何工作的,因为它超出了问题本身的范围。

浮点数

这里的情况再次与整数相同:理解为什么数学不能完全应用于这里的关键是计算机的存储空间有限。

计算机内存中的浮点数表示很像科学记数法:尾数和指数。这两者都有一个固定的有限范围,具体取决于浮点变量的类型。

在基数 10 中,您可能会认为这就像您拥有从 10 ^ -1010 ^ 10 的指数,并且尾数在小数点后具有 4 个小数位,并且始终标准化。

考虑到这一点,请检查这些示例添加:

1.2345 * (10 ^ 0) + 1.0237 * (10 ^ 5)
5.2345 * (10 ^ 10) + 6.7891 * (10 ^ 10)

第一个示例中,结果将等于输入数字之一,而两者都大于零。第二个是结果超出范围的示例。

然而,计算机使用的浮点表示能够表示无穷大,其中有两个:正无穷大和负无穷大。因此,虽然第一个示例作为证明通过,但第二个示例没有通过,因为该加法的结果是正无穷大。

但是,考虑到这一点,您可以生成另一个打样示例:
3.1416 * (10 ^ 0) + (+ infinity)

当然,结果是正无穷大,不管你把它加到什么上面。当然正无穷不大于正无穷,所以再次证明。

关于c - 算术规则是否适用于 C 中的加法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25927774/

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