微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

双精度0.0是否总是在可移植C语言中精确表示?

如何解决双精度0.0是否总是在可移植C语言中精确表示?

| 可以期望以下代码在具有ANSI兼容C编译器的所有环境中工作吗?
double n = 0;
assert(n == 0);
C ++呢?     

解决方法

您不是在问
0.0
是否总是准确表示。 在语句“ 2”中,在进行比较之前,“ 3”被转换为“ 4”。因此,只有在无法将“ 3”从“ 6”转换为“ 4”的情况下,才能触发断言。这是一个比您要问的要弱得多的限制,并且几乎可以肯定会成立(尽管我无法想到一个标准参考来保证它是我的首要任务)。 对于您要提出的问题: 就像其他人提到的那样,C标准不要求浮点类型映射到IEEE-754,但是我不知道与任何不具有精确表示形式的C编译器一起使用的任何浮点表示形式。就是说,对于C实现,使用不带完全零的ѭ4格式是“合法的”。     ,C标准确实对如何表示浮点值设置了一些限制。在第5.2.4.2.2节“浮点类型的特性”中,浮点数必须表现出特性,就像它们是由模型定义的一样:   x = sbeΣk= 1..p fk b-k 哪里: s是符号,必须为±1; b是基数,并且必须是大于1的整数; e是指数,必须是emin和emax之间的整数; p是精度;和 fk是非负整数

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。