【发布时间】:2010-10-22 18:48:00
【问题描述】:
我正在尝试在 Access 2003 或 Access 2010 环境中模拟(不再存在的)大型机报告生成器。它生成的数据必须与 70 年代初的纸质报告完全匹配。不幸的是,最早几年的数据是在使用 IBM 浮点表示而不是 IEEE 的硬件上运行的。在 Google 的帮助下,我找到了一个 VBA 函数库,可以将浮点数从十进制转换为 IEEE 754 32 位二进制格式。我不得不修改库以接受 32 位或 64 位浮点数,因此我对浮点格式有一定的工作知识,但是,我在从 IEEE 到 IBM 二进制格式的转换以及乘法和加法方面遇到了麻烦IBM 或 IEEE 编号。
我还没有找到任何其他库来在 VBA 中执行这种转换和算术运算 - 有没有更简单的方法来解决这个问题,或者我没有找到现有的库?做不到这一点,对相关算法进行清晰明了的解释?
提前致谢。
【问题讨论】:
-
你确定IBM使用浮点的报告吗?大多数这类事情都使用 BCD。
-
我不是 100% 确定 - 这个决定是基于一位同事记得几年前大型机程序员解释说我们无法匹配旧数据的原因是“编译器方式的变化处理小数位”,并在我们停止看到不一致之前几年找到 SAS 添加对 IEEE 浮点和 IBM 浮点的支持的文档。
-
BCD 格式不是浮点格式 或者在 70 年代末和 80 年代的 S/34、S/36 和 S/38 的 IBM 小型计算机世界中不是。 en.wikipedia.org/wiki/Binary-coded_decimal
-
如果您不确定这些报告是否使用了 FP,假设它们是 BCD。在尝试模拟 IBM FP 之前,请尝试使用
Currency或Decimal数据类型。
标签: ms-access vba floating-point ieee-754