如何告诉我的浮点变量存储一个无理数?
我是C ++的新手 我不知道要实现的许多库函数
我想为每个最终都是无理数的计算做出例外
答案 0 :(得分:10)
C ++没有实现一般的任意精度有理数。可用的数字是大小限制的整数和浮点数。
浮点数(采用通用IEEE格式)是一个整数乘以精确的2的幂(正或负)。
偶数0.1 = 1/10
之类的数字无法准确表示,因为分母不是2的幂。
所以答案很简单:-) ...你将面对C ++的任何数字都是理性的,而不是整数乘以(可能是负数)2的幂。
有些库实现了任意精度整数和有理数,但它们不是标准C ++的一部分。
默认情况下,C ++只能管理有理数。此外,它是理性的一个非常具体的子集
写作时
double x = 1.0;
x = x / 10.0;
你得到的结果已经超出了C ++语言的能力,因为分母不是2的幂。
计算机将以x
的近似值存储,因为0.1
它是一个无法以IEEE双格式精确存储的数字。
答案 1 :(得分:0)
浮点数是数字的近似值。尽管它可以在有限的空间内完成,但它是最好的准确。
所以最好的办法是限制两者的效果。它被称为代数。还可以减少轮次错误。