2

这可能以前可能被问过,但我找不到任何相关的东西。

通过任意/固定数量的整数的专用类或结构来实现一种任意/十进制算术是否有可能/性能?

让我澄清一下;浮动(据我了解),使用尾数,指数,也许还有一个符号位。它们能够表示 1/2、1/4、1/8 等……但不能表示 1/10。

我的建议是这样的:让数字由一个普通的intint64_t一系列的数字表示,只保留不超过 10 次方的值,完全被整数范围覆盖(所以对于 32 位 int,限制为 10^8-1)。这只是为了保持计算容易。再加上一个指数,这将说明它应该乘以十的幂才能得到实数。

例如:125.36 将表示为int等于 12536 和十的幂等于 -2。这个数字实际上会占用太多ints 和一堆特殊功能。

另一个例子:4,294,967,297(即 2^32+1)需要两个ints,一个等于 4,另一个等于 294,967,297,十的幂等于 0。

这是一个好主意,为了更简单/更快的算术而丢弃所有这些内存吗?我还没有完全考虑过溢出部分,也许计算int32_t+int32_t=int64_t会很好地解决这个问题?

4

2 回答 2

0

请参阅通用十进制算术页面

于 2011-06-04T15:16:22.653 回答
0

您正在思考二进制算术的精度限制。我认为将二进制精度换成十进制精度不会给你带来任何好处。

你是对的,二进制可以表示 1/2 和 1/4,但不能表示 1/10,十进制可以。但两者都不能代表1/3。所以总是会有一些精度限制。(对于小数计算它可能是隐藏的,因为我们在现实生活中以十进制格式获取大多数数据,这意味着大多数现实生活中的数据都被四舍五入到任何小数位。)

也就是说,您可以查看python Decimal 包(如果 python 是您的语言),它实现了您似乎打算的行为:按照我们在学校学习的方式以“按需”精度计算十进制数学。

于 2011-06-04T15:30:38.037 回答