- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个 cobol 程序,用于计算阶乘:
IDENTIFICATION DIVISION.
PROGRAM-ID. Factorial-hopefully.
AUTHOR. Darth Egregious.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 Keeping-Track-Variables.
05 Operand PIC S99 VALUE 0.
05 Product PIC S99 VALUE 1.
PROCEDURE DIVISION.
PERFORM-FACTORIAL.
DISPLAY SPACES
PERFORM VARYING Operand FROM 6 BY -1 UNTIL Operand = 0
DISPLAY "Before Product " Product " Operand " Operand
MULTIPLY Product By Operand GIVING Product
DISPLAY "After Product " Product " Operand " Operand
END-PERFORM
DISPLAY Product.
STOP RUN.
我是这样运行的:
cobc -free -x -o a.out fact.cbl && ./a.out
我得到了这个奇怪的输出:
Before Product +01 Operand +06
After Product +06 Operand +06
Before Product +06 Operand +05
After Product +30 Operand +05
Before Product +30 Operand +04
After Product +30 Operand +04
Before Product +30 Operand +03
After Product +90 Operand +03
Before Product +90 Operand +02
After Product +90 Operand +02
Before Product +90 Operand +01
After Product +90 Operand +01
+90
我的递减循环按预期工作,但 MULTIPLY
命令运行异常。它正在正确执行 1*6
和 6*5
,但是 30*4
似乎不起作用,然后是 30* 3
起作用了,最后 90*2
又不起作用了。 COBOL 不喜欢乘以 2 的幂之类的东西吗?
最佳答案
My decrementing loop is working as expected, but the MULTIPLY command is behaving strangely. It's doing 1*6, and 6*5 correctly, but 30*4 doesn't seem to work, then 30*3 does, and finally 90*2 doesn't work again. Does COBOL not like multiplying by powers of two or something?
05 Operand PIC S99 VALUE 0.
05 Product PIC S99 VALUE 1.
当您将 30*4
和 90*2
相乘时,值大于 PICTURE
子句,S99
.
将 PIC
子句的大小增加到例如 S999
。
评论回复:
从技术上讲,结果是未定义的 [COBOL 85
],因此什么都不做是一个有效的选择。其他实现会截断该值,从而产生不同的结果。
所以与其说是语言,不如说是实现。
该语言还允许使用 SIZE ERROR
短语来捕获截断错误。在这种情况下,结果不会改变,但可能会执行其他代码以指示发生了错误。
对于 COBOL 2002
,如果未指定 ON SIZE ERROR
短语并检查 EC-SIZE-,则结果由实现者定义TRUNCATION
异常未激活。
引自 2002 年标准:
F.1 Substantive changes potentially affecting existing programs
15) Size error condition with no SIZE ERROR phrase. If a size error condition occurs, the statement in which it occurs contains no SIZE ERROR or NOT SIZE ERROR phrase, and there is no associated declarative, the implementor defines whether the run unit is terminated or execution continues with incorrect values.
Justification:
In the previous COBOL standard, the rules for size error stated that execution would continue with undefined values, but it was not clear where execution would continue, particularly in conditional statements. Additionally, continued execution with incorrect results was not acceptable for many critical applications, where it might cause corruption of databases, incorrect continued execution of the program, and potentially a multitude of additional errors. It was prohibitive to modify programs to add ON SIZE ERROR for every affected statement. Responding to user requirements, several implementors terminated execution of the program in this situation; in some cases, the implementor allowed selection of termination based on a compiler directive.
The number and criticality of applications that terminated in this situation provides strong justification for this change. It is expected that this change will have little impact on existing programs because implementors are free to continue or terminate, in accordance with their implementation of the previous COBOL standard.
关于cobol - MULTIPLY 的行为与我预期的不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50606837/
以下函数作为本练习的介绍,说明了用加法定义的乘法。这是最简单的“容易写下来”的递归定义。 (define (star a b) (if (= b 0) 0 (+ a (st
不知道这个操作叫什么,谷歌也没有帮助。 假设我有两个像这样的简单数据框: df1 df1 factor1 1 a 2 b 3 c > df2 factor
我有这个 cobol 程序,用于计算阶乘: IDENTIFICATION DIVISION. PROGRAM-ID. Factorial-hopefully. AUTHOR. Dar
作为我正在学习的测试优先 ruby 类(class)的一部分,我需要制作一个基本的乘法方法,该方法首先采用 2 个参数并将它们相乘,但之后 rspec 测试将多个数字相乘的能力同样的方法。 我只想
题目地址:https://leetcode.com/problems/multiply-strings/description/ 题目描述 Given two non-negative integ
我正在尝试在 Java 中实现 np.multiply 并且我对它实际在做什么感到困惑。该文档只是说明它进行元素乘法。它与我能找到的任何数学矩阵乘积都不匹配。它部分匹配元素方式的 Hadamard 乘
这个问题在这里已经有了答案: Transpose / reshape dataframe without "timevar" from long to wide format (9 个回答) 关闭2年
我有一些复选框,选中后会更新底部的总价,它们效果很好。不过,我还添加了一个单独的输入字段来输入数量。我试图让该数量乘以输入字段的值。现在我只有将文本输入字段添加到总数中的代码,而不是将其乘以旁边的字段
我正在尝试在 MongoDB 中使用 $multiply 运算符。 第 1 步 db.message1064sd_00011_3744.aggregate([ {$project : {
我有两本字典,一本在代码主体中,一本在输入中。我想比较两个字典,如果键相同,我想相乘并打印值。下面是我迄今为止编写的代码。 dict_a = { 'r':100, 'y':110,
>>> a = [] >>> b = [a*2] >>> b [[]] >>> b = [copy.deepcopy(a)*2] >>> b [[]] 我正在尝试将 b 创建为由 a 的两个副本组成的
我在一个数据库中有几个 mysql 表。 目前我正在对我的网站进行整理测试,其中一个是测试一个沉重的数据库,看看这对性能(搜索)有多大影响。 该网站是一个分类网站。我需要很长时间才能一次插入一个分类以
我有一些代码要运行数千次,想知道什么更快。array 是一个包含 30 个值的短数组,它始终包含 0、1 或 2。 result = (array[29] * 68630377364883.0)
好的,所以我有这样的东西: SendKeys.send("blah" + "{BS}") 我想多次退格“{BS}”,例如有一个变量,我可以将“{BS}”乘以退格一定次数,我该怎么做? 我知道可以在 P
实现大整数乘法 使用整数数组来存储一个 biginteger 像 297897654 将存储为 {2,9,7,8,9,7,6,5,4} 实现 bigintegers 的乘法函数 例子:{2, 9, 8
这个问题在这里已经有了答案: Numpy np.multiply vs *-Operator [duplicate] (2 个回答) 3年前关闭。 numpy.multiply documentati
我正在尝试使用 Transform.multiply4x4() 移动表面修改器,但它似乎没有按预期工作。我试图旋转一个几乎平坦的表面,然后将其发送到远处。我的代码如下所示 myModif
我希望使用 SIMD 指令一次将寄存器中的所有 32 位整数相乘,这是我目前尝试的方法: int32_t a [8] = {1, 2, 3, 4, 5, 6, 7, 8}; int32_t b
尝试在 4 个表(项目、任务、支出和捐赠)上运行简单的内连接查询。连接似乎在某处缠结。例如,SUM(tasks.budget_amount) 应该给出 3,211,385.21 的组合值,但我得到的是
我知道 NaN 的意思不是数字,但我不明白我是如何得到这个错误的。我正在做的是引用来 self 的形状类的我的形状对象的顶点值,并在我的渲染器类中使用它们。当我在 logcat 上打印出顶点的值时,我
我是一名优秀的程序员,十分优秀!