gpt4 book ai didi

c - 浮点表示问题

转载 作者:行者123 更新时间:2023-11-30 19:51:53 25 4
gpt4 key购买 nike

尝试以下代码:

#include <stdio.h>

unsigned char TEST_COMPILER_AS13 = 1.18 * 100;

int main(void) {
printf("%d" , TEST_COMPILER_AS13);
// your code goes here
return 0;
}

使用C语言 https://www.codechef.com/ide

结果是 117

如果我们用 1.17 替换 1.18,结果将是 116,但如果我们使用 1.19、1.20、1.15 等,结果将是正确的 119、120、115。

使用不同的在线编译器说:http://codepad.org/1.18 和 1.17 的结果就可以了但如果你尝试 1.13 、 1.14 、 1.15 ,它会分别是 112 、 113 、 114

我揉着头,不明白为什么会发生这种情况。笔记:我尝试过不同的编译器 DIAB、COSMIC、MinGw 等都有类似的问题。那么我在这里缺少什么或者浮点运算是如何完成的。

注意:要解决这个问题,您可以使用 float 来强制执行操作所以声明如下

unsigned char TEST_COMPILER_AS13 = (float) (1.18 * 100);

我愿意接受您的回答,我真的很想了解这是如何工作的。为什么它适用于某些数字而其他数字则不行,为什么编译器处理它的方式不同,是否有编译器选项会影响编译器行为

最佳答案

按照您的方式,浮点值被截断为整数类型(无符号字符)。要舍入到最接近的值,请改用它。

unsigned char TEST_COMPILER_AS13 = 1.18 * 100 + 0.5;

虽然这可能会“修复”这种特殊情况,但浮点计算始终会存在精度问题。请参阅@JohnnyMopp 在评论中发布的链接。

<小时/>[编辑] 要查看特定编译器“认为”1.18 * 100 是什么,您可以将其打印为完整精度(在 double 的情况下最多 17 位有效十进制数字)。

printf("%.16f * 100 = %.16f\n", 1.18, 1.18 * 100);

关于c - 浮点表示问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34187562/

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