1

如何告诉我的浮点变量存储一个无理数?

我是 C++ 的新手,我不知道要实现多少库函数

我想为每个最终成为无理数的计算例外

4

2 回答 2

9

C++ 没有实现通用的任意精度有理数。可用的数字是大小有限的整数和浮点数。

然而,浮点数(在常见的 IEEE 格式中)是一个整数乘以 2 的精确幂(正或负)。

像这样的偶数0.1 = 1/10不可能精确表示,因为分母不是 2 的幂。

所以答案很简单 :-) ... 你在 C++ 中遇到的任何数字都是有理数,不仅仅是一个整数乘以(可能是负数)2 的幂。

有实现任意精度整数和有理数的库,但它们不是标准 C++ 的一部分。

默认情况下,C++ 只能管理有理数。此外,它是理性的一个非常具体的子集,其中

  1. 分子的绝对值不是太大
  2. 分母是二的幂并且不是太大

当你写

double x = 1.0;
x = x / 10.0;

你得到的结果已经超出了 C++ 语言的能力,因为分母不是 2 的幂。计算机将做的是存储为x一个近似值,因为0.1它是一个无法以 IEEE 双精度格式精确存储的数字。

于 2013-08-25T14:58:48.700 回答
0

浮点数是数字的近似值。在有限的空间里玩是最好的。

所以最好的办法是限制两者的影响。它被称为代数。还可以减少回合错误。

于 2013-08-25T15:02:06.357 回答