Re: PL/I Integer arithmetic (was: Constant Identifiers)

2020-09-09 Thread Seymour J Metz
Since when is 1.33... an integer?


--
Shmuel (Seymour J.) Metz
http://mason.gmu.edu/~smetz3



From: IBM Mainframe Discussion List  on behalf of 
Robin Vowels 
Sent: Wednesday, September 9, 2020 10:08 AM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: PL/I Integer arithmetic (was: Constant Identifiers)

From: "Seymour J Metz" 
Sent: Monday, September 07, 2020 4:13 PM


> PL/I has never had integers.

It always has had integers.

> The arithmetic rules for scaled fixed point are different from those for 
> integers.
> In integer arithmetic, (4/3)*6 is 6 That's not the result you get in PL/I.

Yes it is, with declarations as shown, as I said before, .

Under IBM rules:

%PROCESS RULES(IBM);
INTEGER_DIVISION:
   PROCEDURE OPTIONS (MAIN);
   DECLARE (A, B) FIXED DECIMAL (15);

   A = 4; B = 3;

   PUT (4/3);
   PUT (A/B);
   PUT ( (A/B) * 6 );

END INTEGER_DIVISION;
/* RESULTS:
  1.33   1   6
*/

And under Rules (ans):

%PROCESS RULES(ANS);
INTEGER_DIVISION:
   PROCEDURE OPTIONS (MAIN);
   DECLARE (A, B) FIXED DECIMAL (15);

   A = 4; B = 3;

   PUT (4/3);
   PUT (A/B);
   PUT ( (A/B) * 6 );

END INTEGER_DIVISION;
/* RESULTS:
  1.33   1   6
*/

As you can see, the results are the same under IBM and ANS rules.


From: IBM Mainframe Discussion List  on behalf of 
Robin Vowels

Sent: Sunday, September 6, 2020 7:06 PM
Subject: Re: Constant Identifiers

- Original Message -
From: "Seymour J Metz" 
Sent: Monday, September 07, 2020 5:33 AM


> PL/I doesn't have integers.

PL/I has always had integers.

> The ratiio 4/3 is FIXED BIN,

No it not.  It is FIXED DECIMAL -- as I said a few days ago.
And it hasn't changed since.

> with some number of bits after the binary point.

DECIMAL digits after the decimal point, because the reault
is FIXED DECIMAL, not binary.

---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: PL/I Integer arithmetic. (was: Constant Identifiers)

2020-09-09 Thread Seymour J Metz
The results that you have described are not integer arithmetic. In integer 
arithmetic, 4/3 is 1.


--
Shmuel (Seymour J.) Metz
http://mason.gmu.edu/~smetz3



From: IBM Mainframe Discussion List  on behalf of 
Robin Vowels 
Sent: Wednesday, September 9, 2020 10:14 AM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: PL/I Integer arithmetic. (was: Constant Identifiers)

- Original Message -
From: "Seymour J Metz" 
Sent: Monday, September 07, 2020 3:02 PM
Subject: Re: Constant Identifiers


4/3 yields 1.3, 04/3 yields 1332, ...

Rubbish.
4/3 yields 1.33

INTEGER_DIVISION:
   PROCEDURE OPTIONS (MAIN);
   DECLARE (A, B) FIXED DECIMAL (15);

   A = 4; B = 3;

   PUT (4/3);
   PUT (A/B);
   PUT ( (A/B) * 6 );

END INTEGER_DIVISION;
/* RESULTS:
  1.33   1   6
*/

However, DIVIDE(4,3,16,15) yields 1.3...2 to 15 digits

No, it yields 1.33


From: IBM Mainframe Discussion List  on behalf of 
Robin Vowels

Sent: Sunday, September 6, 2020 7:58 PM
Subject: Re: Constant Identifiers

From: "Paul Gilmartin" <000433f07816-dmarc-requ...@listserv.ua.edu>
Sent: Sunday, September 06, 2020 1:33 PM


On Sat, 5 Sep 2020 08:13:42 +1000, Robin Vowels wrote:
>
>As for writing formulas, I prefer to follow a well-known formula, thus:
>
>volume = 4/3 * 3.14159 * radius**3
>
Beware!  Than might left-associate as:
volume = ( 4/3 ) * 3.14159 * radius**3

"might"?
Evaluation MUST proceed left to right.
So, whether it is written as 4/3 or (4/3), the division will be done first.

> ... and the quotient of integers, 4/3, is 1.

As I indicaed before, 4/3 yields 1.333.to 15 digits.

>However, if I'm interested in efficiency, I'd prefer
>
>volume = 4 * 3.14159E0 / 3 * radius**3
>
... (and correct.)

Yes, it's correct, but I wrote it that way in order to avoid unnecessary
conversions and arithmetic in fixed-point.

---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: PL/I Integer arithmetic. (was: Constant Identifiers)

2020-09-09 Thread Robin Vowels
- Original Message - 
From: "Seymour J Metz" 

Sent: Monday, September 07, 2020 3:02 PM
Subject: Re: Constant Identifiers


4/3 yields 1.3, 04/3 yields 1332, ...

Rubbish.
4/3 yields 1.33

INTEGER_DIVISION:
  PROCEDURE OPTIONS (MAIN);
  DECLARE (A, B) FIXED DECIMAL (15);

  A = 4; B = 3;

  PUT (4/3);
  PUT (A/B);
  PUT ( (A/B) * 6 );

END INTEGER_DIVISION;
/* RESULTS:
 1.33   1   6
*/

However, DIVIDE(4,3,16,15) yields 1.3...2 to 15 digits

No, it yields 1.33


From: IBM Mainframe Discussion List  on behalf of Robin Vowels 


Sent: Sunday, September 6, 2020 7:58 PM
Subject: Re: Constant Identifiers

From: "Paul Gilmartin" <000433f07816-dmarc-requ...@listserv.ua.edu>
Sent: Sunday, September 06, 2020 1:33 PM


On Sat, 5 Sep 2020 08:13:42 +1000, Robin Vowels wrote:


As for writing formulas, I prefer to follow a well-known formula, thus:

volume = 4/3 * 3.14159 * radius**3


Beware!  Than might left-associate as:
   volume = ( 4/3 ) * 3.14159 * radius**3

"might"?
Evaluation MUST proceed left to right.
So, whether it is written as 4/3 or (4/3), the division will be done first.


... and the quotient of integers, 4/3, is 1.


As I indicaed before, 4/3 yields 1.333.to 15 digits.


However, if I'm interested in efficiency, I'd prefer

volume = 4 * 3.14159E0 / 3 * radius**3


... (and correct.)

Yes, it's correct, but I wrote it that way in order to avoid unnecessary
conversions and arithmetic in fixed-point.

---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN 


--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: PL/I Integer arithmetic (was: Constant Identifiers)

2020-09-09 Thread Robin Vowels

From: "Seymour J Metz" 
Sent: Monday, September 07, 2020 4:13 PM



PL/I has never had integers.


It always has had integers.


The arithmetic rules for scaled fixed point are different from those for 
integers.
In integer arithmetic, (4/3)*6 is 6 That's not the result you get in PL/I.


Yes it is, with declarations as shown, as I said before, .

Under IBM rules:

%PROCESS RULES(IBM);
INTEGER_DIVISION:
  PROCEDURE OPTIONS (MAIN);
  DECLARE (A, B) FIXED DECIMAL (15);

  A = 4; B = 3;

  PUT (4/3);
  PUT (A/B);
  PUT ( (A/B) * 6 );

END INTEGER_DIVISION;
/* RESULTS:
 1.33   1   6
*/

And under Rules (ans):

%PROCESS RULES(ANS);
INTEGER_DIVISION:
  PROCEDURE OPTIONS (MAIN);
  DECLARE (A, B) FIXED DECIMAL (15);

  A = 4; B = 3;

  PUT (4/3);
  PUT (A/B);
  PUT ( (A/B) * 6 );

END INTEGER_DIVISION;
/* RESULTS:
 1.33   1   6
*/

As you can see, the results are the same under IBM and ANS rules.


From: IBM Mainframe Discussion List  on behalf of Robin Vowels 


Sent: Sunday, September 6, 2020 7:06 PM
Subject: Re: Constant Identifiers

- Original Message -
From: "Seymour J Metz" 
Sent: Monday, September 07, 2020 5:33 AM



PL/I doesn't have integers.


PL/I has always had integers.


The ratiio 4/3 is FIXED BIN,


No it not.  It is FIXED DECIMAL -- as I said a few days ago.
And it hasn't changed since.


with some number of bits after the binary point.


DECIMAL digits after the decimal point, because the reault
is FIXED DECIMAL, not binary.

---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN 


--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN