在与别人进行了“激烈的讨论”之后,我想为了子孙后代的利益,我会问这个问题。如果我的假设是不正确的,我愿意被纠正,但是我希望听到一个比我更有信誉的人的第三方意见。
让我们假设我们需要计算和存储以十进制格式表示的数值。然而,所有的数值输入和输出都必须符合特定的数值范围。此外,小数是很重要的,但是我们永远不会对任何小于小数位的值感兴趣。这对任何计算都是正确的。如果计算结果在10^-8范围内包含有效数字,则基本上为0。同样,如果值高于我们的上限,那么这将被认为是一个错误案例。
考虑到这些永远不会改变的固定约束,使用传统的十进制(S,p)数据类型更好,还是使用一个整数类型,它可以包含所有的值表示的值S-固定的十进制数字向左移动?例如,为了效率和准确性,我们应该使用0到2,100,000,000,000,000,000,000,000,000之间的整数来表示.00000001和21,000,000,000之间的所有值,还是应该使用定义为(8,16)的小数?
我的具体讨论是关于MySQL中的数据类型。假设大多数十进制表示都以标准化格式存储,我更愿意使用泛型响应。但是,如果十进制类型定义没有可靠的“标准”,请考虑这个问题,因为它与MySQL有关。
发布于 2014-10-15 12:36:41
对于数据库存储,小数。
如果您主要是在主内存中处理这些结果,则可能会造成混乱。有许多小范围浮点/小数点问题可以用缩放整数和不动点数学来解决。例如,我在整数域中求解了这个最近堆栈溢出造成的分区问题,然后以浮点的形式返回答案。我还看到许多文本格式和图形布局算法使用类似的近似。整数的数学是简单的,非常快,而且运行良好。
但是,在不进一步限制您的用例的情况下,也存在一些缺点,例如,这将成为您的责任
sin
和sqrt
。这是“一个简单的努力问题”,但是正确处理这些事情的细节可能会让你对你的主要编码目标感到烦恼和分心。
此外,您特别感兴趣的是将这些值存储在数据库中。这意味着永久性和长的数据生存期。如果我们对这个行业的固定精度数据有什么了解的话,那就是需求会随着时间的推移而改变,然后你将不得不改变你的数据,以及使用它们的应用程序。想想Y2K或金融市场十进制吧。固定点似乎是一个坚实的基础,但几年后,你对十进制精度的需求可能会发生变化。当300 dpi打印机看起来不可能有高分辨率时,选择打印机内部的比例尺当1200 dpi打印机和2400 dpi打印机在几年后滚动时并不是那么精确。
因此,如果您对适合特定问题的高效内存表示感兴趣,定点可以很好地工作。但是如果随着时间的推移你要存储数据,小数就会产生一个更丰富、更符合未来的表达方式,让别人负责工作,让你回到你自己的开发任务中去。
https://softwareengineering.stackexchange.com/questions/260072
复制相似问题