天翼云_虚拟主机管理系统_0元

2021-05-05 16:34

浮点运算

我个人很少接触ABAP中的浮点运算,通常只涉及到一些值的来回计算。我从来没有注意过在ABAP内或不在ABAP内的浮点格式。然而,最近我们有一项业务要求,即为第三方遗留系统提供"IEEE-754单精度"浮点编码的计算浮点。

这是我第一次(遗憾地)了解如何用机器表示浮点。就像字符编码或整数"编码"一样,浮点数需要以一定长度的机器可读二进制格式输入。有各种各样的格式来表示浮点数,最常见和广泛使用的标准是IEEE-754,物联网工程师,它可以追溯到1986年,并在2008年进行了修订。本标准描述了浮点数的字节表示形式,其长度为几个字节。我最感兴趣的是所谓的单精度格式,什么是软件企业,它总共使用32位,被分成

1符号位的段8位表示指数尾数/分数/有效位

为23位作为旁注,双精度使用64位11位指数和52位尾数,使机器计算更精确。

以十进制1742.5

0 10001001 1011001110100000000

十六进制0x44d9d000

0 10000001001 1011001110100000000

十六进制为例0x409B3A0000000000

进一步阅读:

https://en.wikipedia.org/wiki/Floating-point\u算术

https://en.wikipedia.org/wiki/IEEE_-1985

SAP ABAP中的浮点

立即声明我不是ABAP数据类型专家,如果下面的陈述不正确,请告诉我—我真的很想因为一个错误而被叫出来。

我对SAP ABAP中浮点数据类型的期望在研究过程中不幸失望了。我发现帮助站点中的数据类型描述只提到了预定义的数据类型

https://help.sap.com/doc/abapdocu\u 751\u index\u htm/7.51/en-US/abenbuiltin\u types\u numeric.htm

没有给出为什么不支持单精度的提示,我只能假设它被忽略了,因为双精度对业务来说已经足够了然而,我想知道我是否是少数几个处理遗留系统和在这个特定字节表示中存储浮点值的人之一。

回到十进制1742.5的例子。SAP ABAP将f类型表示为

指数:1.742500000000000E+03

十六进制0x00000000003A9B40

请注意,endian是不同的,如果我洗牌字节,它是:0x409B3A0000…如上

缩小尝试

在第一次尝试中,我天真地尝试将长度设置为所定义的数据类型;当然没有效果。我试图找到任何基于功能模块等的转换,以将精度降低到32位。当然,这没什么意义,也许可以做到,但如何处理大指数呢?舍入也是一个关于无穷分数(1/3,π等)的大话题。

再次,请注意,如果我做了错误的假设,服务器和云主机,请告诉我我是否没有清楚地掌握如何处理数据类型,或者是否有任何转换我没有找到。

将人类可读的小数转换为IEEE-754单精度

我只能图2可供选择的方法是:要么对十进制数进行数学运算,将32位转换成正确的编码,要么使用第三方转换库。

这两种方法各有利弊。数学解决方案将是一个自定义的解决方案,它将在我们的控制下,我们将能够解决任何问题。然而,由于这将是自定义代码(大量的行),完成这项任务肯定需要时间和精力,并且需要多次迭代测试和错误修复,企业应用系统,并且需要良好的文档和移交。我也从来没有尝试过在ABAP中洗牌,返利app,所以需要学习曲线。

第三方转换库出现在我的脑海中,因为我在网上研究这个主题,发现了各种各样的工具,可以在不同格式之间进行在线浮点转换,例如:

https://www.h-schmidt.net/FloatConverter/IEEE754.html

https://babbage.cs.qc.cuny.edu/IEEE-754.old/Decimal.html(含双精度)

\u float.html

这些工具大多是用JavaScript或Python编程的,对于我可以比较的数字,我得到了正确的结果。我的想法是将这样一个库合并到SAP并进行转换。好处是:它是经过测试的代码,作为一个缺点,我会看到影响行为将是一个阻力。

我们需要在后端的转换,这限制了我们的编程语言的选择。我个人对JavaScript有一定的经验,并考虑过在这些网站和stackoverflow上找到的代码,这些代码对于转换浮点非常简短和方便。我还发现SAP提供了一个JavaScript引擎来执行ABAP类中的JavaScript服务器端:CL\u JAVA\u SCRIPT.

https://blogs.sap.com/2006/10/16/abap-and-javascript/

一切就绪?

现在有了上述材料,我想我已经找到了一条通往后端转换目标的坚实道路。唉,JavaScript的本质来了,我个人可以用一些技巧来克服它,但也许有另一条我看不到的路。

问题是从我的(几行)JavaScript代码开始的,让SAP解释并运行它。一开始,我并不想完全理解JavasScript引擎;我只希望它是一台转换的I/O机器。当提供的JavaScript代码没有成功执行时,我很失望。显然,代码段中使用的语法和数据对象出现了问题。引擎的设计很可能采用简单(旧)的JavaScript代码。在网站上执行JavaScript时,过时浏览器也会面临同样的问题,因此不要怪引擎。

填充引擎

分享到:
收藏
相关阅读