你在C++中用什么来表示定点
What do you use for fixed point representation in C++?
我正在寻找一个用于财务数据的定点标准,你知道有什么值得尝试的吗?你对手工定点课程的表现有什么经验吗?
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 十进制浮点运算规范,针对金融应用,特别是在法律要求要求需要使用十进制而不是二进制浮点运算的情况下(因为使用二进制浮点运算执行的计算可能会引入小但不可接受的错误)。
虽然这不是固定点,但我认为它对于寻求这个问题的答案的人来说非常有用。
- 函数名称表示什么等等
- 什么是表示?
- 什么"!<number> 在 C/C++ 中表示
- 指针符号在参数规范中表示什么,例如:(char16 *缓冲区,int32 大小)?C++
- 对于eigen sparsematrix,InnerIndExptr()和exout indExptr()准确表示什么
- C 中的运算符(::类型*)0表示什么意思
- GCC ARM 交叉编译,像未定义的引用"__cxa_end_catch@CXXABI_1.3"这样的错误表示什么?
- 0x0040和管道符号在这里表示什么
- GTIFWriteKeys和GTIFKeySet libgeotiff函数(C++)的返回值表示什么
- 移植将 32 位浮点数与使用 64 位进行比较的代码,此值表示什么
- 优先级队列自定义比较器的返回值表示什么
- 这个引用符号表示什么
- 在函数声明中,传递固定大小的数组表示什么
- 这个语句表示什么[func ptr]
- 函数括号后面的 -> 表示法表示什么?
- Very Sleepy分析器中花括号附近的时间测量值表示什么?
- "t"在复制构造函数中表示什么?
- findHomography返回的mask参数的值表示什么?
- 方括号内的c++操作符表示什么?
- 每个AuthzInitializeContextFromSid的错误110表示什么? "While trying to retrieve the authorization groups, an er