你在C++中用什么来表示定点

What do you use for fixed point representation in C++?

本文关键字:表示 什么 C++ 你在      更新时间:2023-10-16

我正在寻找一个用于财务数据的定点标准,你知道有什么值得尝试的吗?你对手工定点课程的表现有什么经验吗?

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

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

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

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

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

N 位小数的快速和肮脏解决方案:((双精度)((整数)(值 * N * 10.0)))/10.0

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

我使用定点数学课。它被设计成或多或少地取代浮子/双打。http://codef00.com/coding

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

IBM 的 decNumber++

ISO 指定了 C TR 24732 和 C++ TR 24733 的十进制扩展名。 它们可以在ISO网站上赚钱。它尚未成为任何已发布C++标准的一部分。 GCC 提供内置类型和它的库实现。 英特尔提供了另一种实施方案。 最近推动将其包含在C++中是在这里。

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

您只需要小心正确舍入百分比,以获得正确的某些定义。

尝试直接回答

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

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

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

IEEE 754-2008 十进制浮点运算规范,针对金融应用

这看起来像是在良好支持(来自英特尔和IEEE)下处理财务数据的既定方式 - http://software.intel.com/en-us/articles/intel-decimal-floating-point-math-library

引用:

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

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