实数的数字表示,替代浮点格式

时间:2011-03-17 16:52:53

标签: floating-point

是否有任何格式来描述实数,而不是浮点格式?

特别是,我要求提供仍然提供可行计算性能的格式(与浮点相比),与符号计算相比。

谢谢。

附录: 我从理论计算机科学的角度对此感兴趣。事实上,我找到了一份科学论文,它给出了一个(小名单)数字系统来“代表”一个实数。 perso.ens-lyon.fr/jean-michel.muller/chapitre1.pdf

我承认,“象征性”一词是暧昧的。我一直在考虑像计算这样的mathematica,这是理论CS中使用的术语。顺便说一句,“描述”并不意味着“精确描述”。然而,“浮动”一词并不适用,因为这没有多大意义。但这与实际问题相去甚远,更具哲学性。

4 个答案:

答案 0 :(得分:2)

嗯,有定点格式和分数(基本上是一种特殊形式的符号计算),但它们都不是很受欢迎,可能是因为除了特定的应用程序之外它们没有浮点数的任何好处。

无论如何,你有什么要求?机会是,浮点数实际上是最合适的,它们经常被误解为通常“不精确”。实际上,它们在某些限制内实际上非常精确 - 但每种格式都有这样的限制,没有专门的硬件,任何更精确的东西都会慢几个数量级。

答案 1 :(得分:2)

我真的很喜欢continued fraction representations。完成lazily,它们可以让您根据需要生成精度。当然,它们会比浮动点等“原生”表示慢。

答案 2 :(得分:1)

我不确定这正是你要找的,但是......
对于嵌入式编程,我们有时将值存储为带符号的0.15固定点以及相关的比例因子。您可以将其视为将所有值存储为-1..1之间的分数,并跟踪乘数和单位。因此,例如,在一个缩放到10A的变量中表示5安培,您可以这样做:

 int16 I = 16384; //.5@10A = 5A

当你做数学时,你只需跟踪比例和单位。

 int16 R = 3277 //.1@2ohm = .2ohm
 int16 V = ((int32)I*R)>>15; //@10A*@2Ohm = @20V
 //result = 1638 => 1638/32768= .05@20V = 1V

使用此系统需要花费大量精力来处理细节,但在具有慢速或无浮点处理器的系统上,它是一种保持任意精度和超快速操作的方法。

答案 3 :(得分:1)

  

特别是,我要求格式   仍然提供可行的计算   表现(与浮动相比)   点),与之相反,象征性的   计算

完全取决于“可行”的含义。有没有什么可以在接近现代硬件浮点速度的任何地方进行浮点式计算?没有。本机硬件操作以外的任何东西都要慢几个数量级。

也就是说,现代硬件(甚至像手机这样的有限设备!)每秒能够进行数十亿次浮点运算。如果那种速度大大超过了你的“可行性”要求,那么有很多可能适合的选择,例如有理逼近,连续分数或软件多精度浮点。