Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > Fortran > Re: whole numbe...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 4 of 40 Topic 8533 of 8908
Post > Topic >>

Re: whole number constants

by nospam@[EMAIL PROTECTED] (Richard Maine) Jul 21, 2008 at 03:00 PM

<dancerchris@[EMAIL PROTECTED]
> wrote:

> I still would like to understand what the best practice is.  writing
> global constants for whole numbers like 1 seems redundant.

It pretty much is. You will have no precision loss from expressing whole
numbers of "reasonable" magnitude in any actual compiler. It doesn't
matter whether you express it as a real or an integer, and it doesn't
matter what kind.

There are two cases where it does matter.

1. When you start doing operations. There is a big difference between
1/3.0 and 1/3.0d0. There is an even bigger difference between these and
1/3.

2. In procedure arguments, you must have the type and kind correct.
That's pretty much all there is to say about that. There is no single
type and kind that is always the best one. You just have to use the
correct one for the particular procedure in question.

 I don't have a magic "best practice" other than to pay attention to
data type. Don't count on some single "best practice" to be the right
thing for all cases. Instead, make it a habit to consciously think about
the type and kind of your data. That being said, I personally do tend to
have a parameter named one because it is often convenient.

On your specific question

> real(dp), parameter :: one = 1.0_dp
> real(dp), parameter :: onend = 1_dp
> real(dp), parameter :: onenk = 1.0
> real(dp), parameter :: onei = 1

All of these are equivalent, except for the 1_dp. As noted previously,
that one is basically nonsense. The 1.0_dp form is technically the "most
correct". I also think it is the clearest; the other two valid ones seem
subject to human misreading, though the compiler will get them right. It
will implicitly convert them to the type and kind of the parameter. In
the case of whole numbers, this conversion will be exact. Note that it
is *NOT* exact in other cases. Something like

  real(dp), parameter :: one_third = 1./3.

will be accurate only to single precision, and if you make the
right-hand-side 1/3, the resulting value will be just 0.

> ! which should I use ?
> 
> 10 error = one-xnew/x
> 20 error = onend-xnew/x
> 30 error = onenk-xnew/x
> 40 error = onei-xnew/x
> 
> ! or the more ledgable ?
> 
> 50 error = 1-xnew/x
> 
> ! or the slightly less ledgable ?
> 
> 60 error = 1_dp-xnew/x

Other than the nonsense case of 1_dp, which was mentioned before, all
these are equivalent. You need to learn the basic rule of implicit
conversion for the intrinsic numeric operators. When a numeric operator
has operands of two different types or kinds, the operand of "lower
precision" is converted to the higher precision before performing the
operation. For the purposes of this description, integers count as
having "lower precision" than reals.

Furthermore, all your variously named parameters have the same type and
kind anyway. Once you know the type, kind, and value of the parameter,
the rest is irrelevant. It doesn't matter how that value got defined.
The compiler doesn't "remember" that your onei got defined by converting
an integer value.

-- 
Richard Maine                    | Good judgement comes from experience;
email: last name at domain . net | experience comes from bad judgement.
domain: summertriangle           |  -- Mark Twain
 




 40 Posts in Topic:
whole number constants
dancerchris@[EMAIL PROTEC  2008-07-21 14:16:11 
Re: whole number constants
Craig Powers <craig.po  2008-07-21 17:20:00 
Re: whole number constants
dancerchris@[EMAIL PROTEC  2008-07-21 14:27:13 
Re: whole number constants
nospam@[EMAIL PROTECTED]   2008-07-21 15:00:02 
Re: whole number constants
Dick Hendrickson <dick  2008-07-21 21:30:53 
Re: whole number constants
"robin" <rob  2008-07-22 05:34:44 
Re: whole number constants
Dick Hendrickson <dick  2008-07-22 15:02:50 
Re: whole number constants
"robin" <rob  2008-07-23 05:14:08 
Re: whole number constants
Dick Hendrickson <dick  2008-07-23 15:26:15 
Re: whole number constants
dancerchris@[EMAIL PROTEC  2008-07-21 14:49:41 
Re: whole number constants
glen herrmannsfeldt <g  2008-07-21 15:33:55 
Re: whole number constants
dancerchris@[EMAIL PROTEC  2008-07-21 14:52:15 
Re: whole number constants
nospam@[EMAIL PROTECTED]   2008-07-21 15:27:09 
Re: whole number constants
"robin" <rob  2008-07-22 05:34:36 
Re: whole number constants
dancerchris@[EMAIL PROTEC  2008-07-21 15:51:23 
Re: whole number constants
nospam@[EMAIL PROTECTED]   2008-07-21 16:38:16 
Re: whole number constants
Paul van Delst <Paul.v  2008-07-22 09:24:25 
Re: whole number constants
glen herrmannsfeldt <g  2008-07-22 09:11:17 
Re: whole number constants
"robin" <rob  2008-07-23 05:14:05 
Re: whole number constants
"J. F. Cornwall"  2008-07-23 19:15:05 
Re: whole number constants
glen herrmannsfeldt <g  2008-07-21 16:52:25 
Re: whole number constants
nospam@[EMAIL PROTECTED]   2008-07-21 17:41:43 
Re: whole number constants
dancerchris@[EMAIL PROTEC  2008-07-21 15:58:09 
Re: whole number constants
Paul van Delst <Paul.v  2008-07-22 09:14:32 
Re: whole number constants
dancerchris@[EMAIL PROTEC  2008-07-21 17:49:19 
Re: whole number constants
"robin" <rob  2008-07-22 05:34:37 
Re: whole number constants
nospam@[EMAIL PROTECTED]   2008-07-22 01:35:01 
Re: whole number constants
glen herrmannsfeldt <g  2008-07-22 09:19:55 
Re: whole number constants
"robin" <rob  2008-07-23 05:14:06 
Re: whole number constants
glen herrmannsfeldt <g  2008-07-22 23:39:36 
Re: whole number constants
"robin" <rob  2008-10-02 14:56:53 
Re: whole number constants
"robin" <rob  2008-10-02 14:56:52 
Re: whole number constants
glen herrmannsfeldt <g  2008-10-02 13:44:10 
Re: whole number constants
glen herrmannsfeldt <g  2008-07-24 22:06:52 
Re: whole number constants
Thomas Koenig <tkoenig  2008-07-22 08:04:03 
Re: whole number constants
lindahl@[EMAIL PROTECTED]  2008-07-22 03:07:29 
Re: whole number constants
"Les" <l.nei  2008-07-22 11:34:53 
Re: whole number constants
glen herrmannsfeldt <g  2008-07-22 09:24:39 
Re: whole number constants
Thomas Koenig <tkoenig  2008-07-24 06:17:59 
Re: whole number constants
Michael Prager <Mike.P  2008-07-24 10:21:33 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Wed Nov 19 7:40:58 CST 2008.