gpt4 book ai didi

c++ - 浮点值 0.0 的表示方式是否与其他浮点值不同?

转载 作者:行者123 更新时间:2023-12-02 00:03:50 24 4
gpt4 key购买 nike

我一直在翻阅我的 C++ 书籍,我遇到了一个声明,它说零可以精确地表示为一个 float 。我想知道这怎么可能,除非 0.0 的值存储为浮点值以外的类型。我写了下面的代码来测试这个:

#include <iomanip>
#include <iostream>

int main()
{
float value1 {0.0};
float value2 {0.1};

std::cout << std::setprecision(10) << std::fixed;

std::cout << value1 << '\n'
<< value2 << std::endl;
}

运行这段代码得到以下输出:

0.0000000000
0.1000000015

到10位精度,0.0还是0,0.1有一些不准确(这是意料之中的)。值 0.0 在表示方式上是否与其他 float 不同,这是编译器或计算机体系结构的特性吗?

最佳答案

2 如何表示为一个精确的数字? 4? 15? 0.5?答案只是一些数字可以用浮点格式(基于 base-2/二进制)精确表示,而其他数字则不能。

这与十进制没有区别。您不能用十进制精确表示 1/3,但这并不意味着您不能表示 0。

零在某种程度上是特殊的,因为(与其他实数一样)证明此属性比某些任意小数更简单。但仅此而已。

所以:

what is it about these values (0, 1/16, 1/2048, ...) that allows them to be represented exactly.

简单的数学。在任何给定的基数中,在我们正在讨论的表示形式中,一些数字可以用固定的小数位数写出;其他人不能。就是这样。

您可以在线玩 H. Schmidt's IEEE-754 Floating Point Converter对于不同的数字,可以看到一堆不同的表示,以及编码到这些表示中会产生什么错误。对于初学者,请尝试 0.5、0.2 和 0.1。

It was my (perhaps naive) understanding that all floating point values contained some instability.

不,绝对不是。

您想对待您程序中的每个浮点值都可能有一些小错误,因为您通常不知道是什么计算序列导致的它。您不能相信它,一般。我希望过去有人半途而废地向您讲授这一点,这就是导致您产生误解的原因。

但是,如果您确实知道在创建值的每个步骤中涉及的错误(或缺少错误)(例如“我所做的就是将其初始化为零”),那么没关系!那就不用担心了。

关于c++ - 浮点值 0.0 的表示方式是否与其他浮点值不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61260040/

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