c - 使 C float 精确?

标签 c floating-point

在 C 中,当设置了一个 float 时,

int main(int argc, char *argv[]) {
    float temp = 98.6f;
    printf("%f\n", temp);
    return 0;
}

它似乎总是会出现某种舍入错误,

98.599998

但是当我让它更精确时,

float temp = 96.600000f;

它仍然打印不同的数字。这应该如何解决?

最佳答案

It still prints a different number. How is this supposed to be solved?

如果您想要精确的小数值,可以使用不同的数据类型。

二进制 float 精确的——只是它们是精确的二进制值。

例如,如果您想表示以 3 为基数的数字,十进制也是不精确的。没有精确的二进制表示 0.1 的十进制数,就像没有精确的十进制表示“三分之一”一样。

这完全取决于您的要求是什么,并使用与其相匹配的数据类型。对于精确的十进制值,您可能最好使用第三方库……或者保留一个您知道在逻辑上按 100、10,000 或其他任何比例缩放的整数。

关于c - 使 C float 精确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17733835/

相关文章:

c - 为什么 int main() { return main();导致堆栈溢出而不是尾递归?

c - 程序进入无限循环而不是调用函数?

c - 在 C 中访问结构体中的 void *

math - float 学坏了吗?

c - 许多无效的符号索引和对 main 的 undefined reference

c - 如何将给定字符串与结果进行比较

c++ - 启用浮点异常的浮点堆栈处理

java - 将 float 截断为前两个非零小数位

python - 很好地表示 python 中的 float

testing - 关于比较 float 的容差和公式的原则性推理?