gpt4 book ai didi

c - `N.0 == N && (int)N.0 == N` 是否为真,其中 `N` 是 int 范围内的整数文字?

转载 作者:太空宇宙 更新时间:2023-11-04 00:24:23 24 4
gpt4 key购买 nike

N.0 == N && (int)N.0 == N 是否为真,其中 Nint< 范围内的整数文字?

一般情况下是真的还是假的?

最佳答案

如果我们将 N.0 重写为 (double) N,我们将得到以下内容:

(double) N == N && (int) (double) N == N

然后,我们可以将隐式转换为显式转换:

(double) N == (double) N && (int) (double) N == N

显然,(double) N == (double) N 始终为真。所以可能失败的是第二个等式。

假设 int 是 64 位,double 是 IEEE double。然后有 int 不能表示为 double(例如 253+1),使命题为假。具有 64 位 int 的系统很少见,但它们存在。在这里,让 ^ 表示求幂。

(int) (double) (2^53 + 1) == 2^53 + 1
(int) (2^53) == 2^53 + 1
2^53 == 2^53 + 1
false

如果已知 int 是 32 位的并且 double 是一个 IEEE double,那么这个命题总是正确的,因为所有 int在这些系统中可以精确地表示为 double

扩展精度

正如 chux 指出的那样,编译器可以自由地为 N.0 使用大于 double 的东西。如果此类型能够表示所有 int,则该命题将为真。假设该类型称为 long double:

(long double) N == (long double) N && (int) (long double) N == N
// ^^^^^^^^^^^^^ implicit conversion

请注意,隐式转换现在必须是转换为 long double,因为这些是 == 的规则。结果是对于无法用浮点类型表示的N,左手等式仍然始终为真,右手等式仍然为假。

总结

命题是:

  • True 如果所有 int 都可表示为 double

  • 否则,true如果扩展精度用于常量,并且所有 int 都可以使用该类型表示。

  • 否则,错误

关于c - `N.0 == N && (int)N.0 == N` 是否为真,其中 `N` 是 int 范围内的整数文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31506963/

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