之前可能已经提出过这个问题,但我找不到任何相关内容。
通过任意/固定数量的整数的专用类或结构来实现一种任意/十进制算术是否可能/高效?
让我澄清一下;浮点数(据我所知),使用尾数,指数和符号位。它们能够代表1 / 2,1 / 4,1 / 8等......但不是1/10。
我建议的是这样的:让数字由普通的int
或int64_t
或其中的一系列表示,只保留由10的幂完全覆盖的值。整数的范围(因此对于32位int,限制将是10 ^ 8-1)。这只是为了保持计算简单。再加上一个指数,它会说十倍的幂乘以得到实数。
一个例子:125.36将由等于12536的int
和等于-2的10的幂表示。这个数字实际上只需要int
s和一堆特殊函数。
另一个例子:4,294,967,297(即2 ^ 32 + 1)需要两个int
s,一个等于4,另一个等于294,967,297,幂10等于0。
这是一个好主意,抛弃所有这些内存以获得更简单/更快的算术吗?我还没有想到溢出部分,也许计算int32_t+int32_t=int64_t
能解决这个问题吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
您正在思考二进制算术的精度限制。我认为以十进制精度交易二进制精度不会带你到任何地方。
你是对的,二进制可以代表1/2和1/4,但不是1/10,十进制可以。但他们两个都不能代表1/3。所以总会有一些精度限制。 (它可能被隐藏用于十进制计算,因为我们以十进制格式获得现实生活中的大多数数据,这意味着大多数现实生活数据被舍入到任何小数位数。)
那就是说,您可以查看python Decimal package(如果python是您的语言),它实现了您似乎想要的行为:按照我们在学校学习的方式“按需”精确计算十进制数学。