22

我正在寻找用于财务数据的定点标准,您知道有什么值得尝试的吗?你对那个手工定点类的性能有什么经验吗?

4

7 回答 7

6

哎哟。金融系统很棘手,您的主要问题不是定点数学,而是舍入误差。

您可以拥有一个漂亮的电子表格,其中包含按客户类型和增值税计算的折扣。你做了一个总数,你把它提交给一个会计师,他说这些值都是错误的。原因:输出的格式可能只有 2 个小数位,但在内部,该值具有浮点数或双精度数的所有小数位。他们确实加起来了。

您需要了解您的财务状况并决定基值在哪里。这意味着会计师将检查哪些值(是的,它需要业务知识,提高“棘手”部分)。

在将值保存到持久形式(数据库、文件、内存......)之前,您会截断乘法和除法可能添加的额外小数位。

N个小数位的快速而肮脏的解决方案:((double)((int)(Value * N * 10.0)))/10.0

当然,您需要准确检查您的财务需要哪种四舍五入。

于 2008-09-28T17:21:34.843 回答
6

Dr.Dobb's 有一篇关于 C++ 中定点算术类型的可能实现的文章。看看这个

于 2008-09-28T16:40:40.230 回答
6

我使用我的定点数学课。它旨在或多或少地替代浮动/双打。http://codef00.com/coding

编辑:作为旁注,我个人不会为此目的使用定点类。相反,我只会存储美分的数量(或十分之一美分,或需要的百分之一美分)。A 直接用它做数学。然后我会在向用户显示时适当地缩放值。

于 2008-09-28T18:35:51.497 回答
0

IBM 的decNumber++

于 2008-09-28T16:42:12.380 回答
-1

试图直接回答

Markus Trenkwalder 有一个支持一些数学函数的函数 - http://www.trenki.net/content/view/17/1/

该库包含用于处理定点数的各种函数(乘法、除法、求逆、sin、cos、sqrt、rsqrt)。它还包含一个 C++ 包装类,可用于大大简化使用定点数的工作。我将这个定点数类与我的 vector_math 库结合使用,以获得一个定点向量数学库。与浮点版本相比,这样做使 3D 计算快得多。

作者特意说他的平台不支持浮点,这就是他这样做的原因。另外,请注意,它是用于 3D 渲染的,问题是针对财务数据的,我们需要一个好的数学函数库......

IEEE 754-2008 Decimal Floating-Point Arithmetic 规范,针对金融应用

这看起来像是一种处理财务数据的既定方法,得到了很好的支持(来自英特尔和 IEEE) - http://software.intel.com/en-us/articles/intel-decimal-floating-point-math-library

去引用:

IEEE 754-2008 Decimal Floating-Point Arithmetic 规范,针对金融应用,特别是在法律要求必须使用十进制而不是二进制浮点算术的情况下(因为使用二进制浮点运算执行的计算可能会引入少量、但不可接受的错误)。

虽然它不是定点的,但我认为它对于寻求这个问题的答案的人来说非常有用。

于 2014-01-16T23:01:01.680 回答
-1

ISO 指定了 C 的十进制扩展名 TR 24732 和 C++ 的 TR 24733。它们可在ISO 网站上购买。它还不是任何已发布的 C++ 标准的一部分。GCC 提供了内置类型它的库实现英特尔提供了另一种实现方式 。将其包含在 C++ 中的最新推动是在这里

于 2014-01-10T11:36:58.313 回答
-1

一个 64 位的 int 类型应该足以以美分表示所有财务价值。

对于正确的一些定义,您只需要小心正确地舍入百分比

于 2014-01-10T12:11:46.177 回答