Barry_Cornelius@durham.ac.UK (05/11/88)
________________________________________________________________ Message: 259300, 28 lines Posted: 9:21am BST, Mon May 9/88 Subject: MathLib0 procedures :: "Michael Drechsler +49 (0201) 343062" <HPA111@E To: Barry Cornelius From: Coloured Books Server X-Agent: SPCP Via: UK.AC.RL.EARN; Mon, 09 May 88 09:21:05 BST Received: from UKACRL by UK.AC.RL.IB (Mailer X1.25) with BSMTP id 3987; Mon, 09 May 88 09:21:05 BS Received: by UKACRL (Mailer X1.25) id 3976; Mon, 09 May 88 09:21:02 BST Date: Mon, 9 May 88 10:01:03 GMT Reply-To: Info-Modula-2 mailing list <INFO-M2@EARN.DB0TUI11> Sender: Info-Modula-2 mailing list <INFO-M2@EARN.DB0TUI11> From: "Michael Drechsler +49 (0201) 343062" <HPA111@EARN.DE0HRZ1A> Subject: MathLib0 procedures To: no name <barry_cornelius@UK.AC.DURHAM.MTS> Hello, at the end of Wirth's book PIM2 ed.3 (german version) is a listing of the def mod MathLib0, but no description. This module contains the two procedures "real" and "entier". I have some ideas what this procs do, but I'm not sure. Is the PROCEDURE real(x:INTEGER): REAL; only another form of FLOAT(CARDINAL(x)) or is the PROCEDURE entier(x:REAL): INTEGER; just another form of INTEGER(TRUNC(x)) ? Thanks for your help, Mike ________________________________________________________________ Message: 259671, 36 lines Posted: 7:21pm BST, Mon May 9/88 Subject: Re: MathLib0 procedures :: Harvard Townsend <harv@EDU.KSU.CIS.HARRIS> To: Barry Cornelius From: Coloured Books Server X-Agent: SPCP Via: UK.AC.RL.EARN; Mon, 09 May 88 19:21:34 BST Received: from UKACRL by UK.AC.RL.IB (Mailer X1.25) with BSMTP id 3351; Mon, 09 May 88 19:21:34 BS Received: by UKACRL (Mailer X1.25) id 3342; Mon, 09 May 88 19:21:33 BST Date: Mon, 9 May 88 09:02:31 CDT Reply-To: Info-Modula-2 mailing list <INFO-M2@EARN.DB0TUI11> Sender: Info-Modula-2 mailing list <INFO-M2@EARN.DB0TUI11> From: Harvard Townsend <harv@EDU.KSU.CIS.HARRIS> Subject: Re: MathLib0 procedures X-To: HPA111@DE0HRZ1A To: no name <barry_cornelius@UK.AC.DURHAM.MTS> >>Is the >> PROCEDURE real(x:INTEGER): REAL; >>only another form of FLOAT(CARDINAL(x)) Correct. That's all our implementation does: "RETURN (FLOAT(x));" >>or is the >> PROCEDURE entier(x:REAL): INTEGER; >>just another form of INTEGER(TRUNC(x)) ? This one is a little different. I understand it to be the "nearest integer to REAL x". So I guess it is a TRUNC with rounding. Any REAL number with a fractional part >= .5 is rounded up to the next highest integer. Anything < .5 is equivalent to TRUNC(x). ______________________________________ Harvard Townsend, Systems Manager Dept. of Computing & Information Sciences Kansas State University, Manhattan, KS 66506 (913)532-6350 CSNET: harv@cis.ksu.edu -or- harv@kansas-state.csnet BITNET: harv@ksuvax1.bitnet -or- harv%ksuvax1.bitnet@cunyvm.cuny.edu UUCP: ihnp4,cbatt,dcdwest !ncr-sd!ncrwic!ksuvax1!harv -or- ihnp4!wnuxa!ksuvax1!harv -or- ...!psuvax1!ksuvax1.bitnet!harv ________________________________________________________________ Message: 259863, 40 lines Posted: 12:14pm BST, Tue May 10/88 Subject: Re: MathLib0 procedures :: Alan Lovejoy <pdn!alan@NET.UU.UUNET> To: Barry Cornelius From: Coloured Books Server X-Agent: SPCP Via: UK.AC.RL.EARN; Tue, 10 May 88 12:12:58 BST Received: from UKACRL by UK.AC.RL.IB (Mailer X1.25) with BSMTP id 1460; Tue, 10 May 88 12:12:58 BS Received: by UKACRL (Mailer X1.25) id 1376; Tue, 10 May 88 12:12:41 BST Date: Tue, 10 May 88 01:34:24 GMT Reply-To: Info-Modula-2 mailing list <INFO-M2@EARN.DB0TUI11> Sender: Info-Modula-2 mailing list <INFO-M2@EARN.DB0TUI11> Comments: Warning -- original Sender: tag was editor%ucf1vm.BITNET@jade.berkeley.e From: Alan Lovejoy <pdn!alan@NET.UU.UUNET> Subject: Re: MathLib0 procedures X-To: info-modula-2@ucf1vm To: no name <barry_cornelius@UK.AC.DURHAM.MTS> In article <INFO-M2%88050910174344@DB0TUI11> Info-Modula2 Distribution List <INFO-M2%UCF1VM.bitnet@jade.berkeley.edu> writes: >Is the > PROCEDURE real(x:INTEGER): REAL; >only another form of FLOAT(CARDINAL(x)) Real is a function defined on INTEGERs instead of CARDINALs. Note that if x < 0, then CARDINAL(x) is gibberish. >or is the > PROCEDURE entier(x:REAL): INTEGER; >just another form of INTEGER(TRUNC(x)) ? Entier is a function whose domain is the INTEGERs, not the natural numbers (CARDINALs). It is known in American math jargon as "floor". It returns the greatest number not less than its input, where greater and lesser are defined arithmetically, not in terms of absolute magnitude. The distinction is important for INTEGERs, but not for CARDINALs. -- Alan Lovejoy; alan@pdn; 813-530-8241; Paradyne Corporation: Largo, Florida. Disclaimer: Do not confuse my views with the official views of Paradyne Corporation (regardless of how confusing those views may be). Motto: Never put off to run-time what you can do at compile-time! ________________________________________________________________ Message: 259865, 46 lines Posted: 12:14pm BST, Tue May 10/88 Subject: Re: MathLib0 procedures :: Alan Lovejoy <pdn!alan@NET.UU.UUNET> To: Barry Cornelius From: Coloured Books Server X-Agent: SPCP Via: UK.AC.RL.EARN; Tue, 10 May 88 12:13:04 BST Received: from UKACRL by UK.AC.RL.IB (Mailer X1.25) with BSMTP id 1476; Tue, 10 May 88 12:13:04 BS Received: by UKACRL (Mailer X1.25) id 1407; Tue, 10 May 88 12:12:47 BST Date: Tue, 10 May 88 01:58:27 GMT Reply-To: Info-Modula-2 mailing list <INFO-M2@EARN.DB0TUI11> Sender: Info-Modula-2 mailing list <INFO-M2@EARN.DB0TUI11> Comments: Warning -- original Sender: tag was editor%ucf1vm.BITNET@jade.berkeley.e From: Alan Lovejoy <pdn!alan@NET.UU.UUNET> Subject: Re: MathLib0 procedures X-To: info-modula-2@ucf1vm To: no name <barry_cornelius@UK.AC.DURHAM.MTS> In article <8805091402.AA23129@harris.cis.ksu.edu> Info-Modula2 Distribution List <INFO-M2%UCF1VM.bitnet@jade.berkeley.edu> writes: >Correct. That's all our implementation does: "RETURN (FLOAT(x));" But he wrote "FLOAT(CARDINAL(x))", which is not necessarily equivalent! >>> PROCEDURE entier(x:REAL): INTEGER; >>>just another form of INTEGER(TRUNC(x)) ? > >This one is a little different. I understand it to be the "nearest integer >to REAL x". So I guess it is a TRUNC with rounding. Any REAL number with >a fractional part >= .5 is rounded up to the next highest integer. >Anything < .5 is equivalent to TRUNC(x). In PIM2/3rd Ed., pg. 162, Wirth states: TRUNC(x) real number x truncated to its integral part (of type CARDINAL). Wirth does not define "entier". But when I researched it back in 1984, If found it to be a europeanism for "floor", which does no rounding. Now if I could just remember where I found that piece of information... -- Alan Lovejoy; alan@pdn; 813-530-8241; Paradyne Corporation: Largo, Florida. Disclaimer: Do not confuse my views with the official views of Paradyne Corporation (regardless of how confusing those views may be). Motto: Never put off to run-time what you can do at compile-time! ________________________________________________________________ Message: 260023, 67 lines Posted: 5:34pm BST, Tue May 10/88 Subject: Re: MathLib0 procedures :: Robert Nagler <nagler%olsen%unizh.UUCP@EAR To: Barry Cornelius From: Coloured Books Server X-Agent: SPCP Via: UK.AC.RL.EARN; Tue, 10 May 88 17:31:43 BST Received: from UKACRL by UK.AC.RL.IB (Mailer X1.25) with BSMTP id 3957; Tue, 10 May 88 17:31:43 BS Received: by UKACRL (Mailer X1.25) id 3947; Tue, 10 May 88 17:31:43 BST Date: Tue, 10 May 88 10:02:32 +0200 Reply-To: Info-Modula-2 mailing list <INFO-M2@EARN.DB0TUI11> Sender: Info-Modula-2 mailing list <INFO-M2@EARN.DB0TUI11> From: Robert Nagler <nagler%olsen%unizh.UUCP@EARN.CERNVAX> Subject: Re: MathLib0 procedures X-To: info-modula-2@klaus.UUCP To: no name <barry_cornelius@UK.AC.DURHAM.MTS> Modula-2 doesn't allow conversion of reals to integers, i.e. you can't convert a negative integer to a real or vice-versa. Apparently, Dr. Wirth found this to be a needed feature, so he included it in a library. Doing type coercions to CARDINAL while yield incorrect results (unless there are other bugs in the language implementation). Enclosed (below) you will find implementations of these two routines which are a "best guess" at how these procedures might be implemented in a portable library. Most compiler companies supply libraries which play around with assembly language or floating point chips, therefore it is often fruitless to look at them for algorithms. NOTE: Modula-2 has problems with twos complement integers (MININT), therefore the implementations provided will fail if they are passed MININT. One can handle the problem, but I felt it would detract from the presentation of the algorithm if I included the special case code. Rob PS. If you are wondering about the FLOAT usage (i.e. FLOAT is passed an integer), Modula-2 states that cardinals and integers are assignment compatible which means you can pass positive INTEGERs to procedures that accept CARDINALs. --------------------------------------------------------- PROCEDURE real( (* Convert an integer to a real *) x : INTEGER (* should be in the range: [ -MAX( x ) .. MAX( x ) ] *) ) : REAL; VAR result : REAL; BEGIN (* real *) IF x >= 0 THEN RETURN FLOAT( x ); END; result := FLOAT( -x ); (* breaks here if MININT (except on Univacs) *) RETURN -result; END real; PROCEDURE entier( (* Truncate a real towards negative infinity *) x : REAL (* same restrictions as "real" *) ) : INTEGER; VAR result : INTEGER; BEGIN (* entier *) IF x > 0.0 THEN RETURN TRUNC( x ); END; x := -x; result := TRUNC( x ); (* If the number is not exact, must adjust towards negative infinity *) IF FLOAT( result ) # x THEN INC( result ); END; RETURN -result; END entier;
rbh@computer-science.nottingham.ac.UK (Roger Henry) (05/11/88)
Have you checked how these views compare with our proposals?