On Thu, Nov 14, 2002 at 07:58:55PM +0100, Angel Faus wrote:
> Hi all,

Hi Angel,


> This is the numeric literals part, reformated to follow Michael's 
> outline.

My contribution is some copyediting and a few suggestions.  Take what
you think is worthwhile.
 


> -----------------------------------------
> =section * Numeric Literals
> 
> =section ** Integer and Decimal literals
> 
> There are many ways to specify literal numeric values in
> perl, but they default to base 10 for input and output.

s/perl/Perl/

(Aren't we still using the capitalization to distinguish between the
interpreter and the language?)



> Perl allows you to use the standard scientific notation

s/the//


> It works just like the standard scientific notation:

Delete this phrase; you've already said that this IS standard SN.


> the left portion of the C<e> is the coefficient, and the

s/the/The/

> right is the exponent, so a number of the form C<C.CCCeEE>
> is actually intepreted as C<C.CCC * 10**EE>.

I would suggest using XX for the exponent, so as to have less
confusion with the 'e'-as-exponent-marker.  Also, add a sentence
stating that the exponent marker may be in either case.  Then you get:

"...right is the exponent, so a number of the form C<C.CCCeXX> is
actually intepreted as C<C.CCC * 10**XX>.  You may use either upper-
or lowercase 'e' as the exponent marker, so, for example, 3.6e3 is the
same as 3.6E3."


> For example, the literal C<7.828e6> is interpreted as
> C<7823000>.

7828000, as was already pointed out


> You can use negative numbers in the exponent side, allowing
> you to write very small numbers.

"You may write very small numbers by using negative exponents."


> =section ** Radix Notation
> 
> For integer numbers, you can represent the literal value
> in any other base, using the C<radix:dddddddd> syntax.

s/other//



> a need to represent digits that are greater than 9.
> 
> You can do this in two ways:

Make the above be one paragraph; you haven't started a new thought
yet.
 


> Alphabetic characters: Following the standard convention,
> perl will interpret the A letter as the digit 10, the B
> letter as digit 11, and so on.

s/perl/Perl/

"...will interpret the letter A...the letter B as the digit...."
                                                  ^^^


> Separating by dots: You can also write each digit in its
> decimal representation, and separate digits using the C<.>
> character.

Although "separating by dots" is perfectly correct and fluid, I would
suggest using the term "dotted notation," just so people start getting
used to it.


>  my $m = 256:255.255.255.0;        # 256-base

"# base 256"


> For example, the integer 30 can be written in hexadecimal
> base in two equivalent ways:

Either say:
        "...in hexadecimal..." or
        "...in base 16...",
but don't mix them.



> Also note that a compile-time error will be generated
> if you specify a "digit" that is larger than your radix
> can support.  For instance,
> 
>  my $x = 3:23; # error

Very small nit:  the problem here is the digit 3, but on first glance
it looks like you are saying that the digit in question is 23.  Extend
the comment to explain:

  "my $x = 3:23; # error; can't use digit '3' in base 3"



> Beware that when writing negative integers, the negative
> character C<-> should be at the leftest point of the
> expression:

"When writing negative integers, be aware that the minus sign (C<->)
must always be the leftmost character in the literal, which means it
will come to the left of the radix when using radix notation."



>  my $z = -256:234.254;                  # negative number
>  my $e = 256:-234.254;                  # error
> 
> Keep in mind that once the number has been read by perl

Perl

> it becomes just a magnitude. That is it loses all trace of

s/That is it/That is, it/

> the way it was originally represented and is just a number. 
> Perl will use decimal base when printing all the numbers, no 
> matter what base did you use to type them.

Either say "base 10" or "decimal notation", not "decimal base".

I would suggest:

"Perl always uses decimal for printing numbers, regardless of what
base you used to enter them."


> =section ** Underscore character as a seprator
> 
> Perl allows the underscore character, C<_>, to be placed as

s/placed/used/

> a separator between the digits of any literal number. You
> can use this to break up long numbers into more readable
> forms.

"...to break up a long number into a more readable form."


> There aren't any rules to it; you can use it however
> you like:

"The only rule is that you may only use underscore between digits, not
between any other characters that is allowed to appear in a number."


>  123_456_000.000   (floating point)
>  2:0110_1000       (binary) 
>  16:FF_88_EE       (hexidecimal) 
>  1312512.25        (decimal number) 
>  1_312_512.25      (the same)
   1_312_512_.25     (error)
   1_312_512._25     (error)
   1.375_e56         (error)
   1.375e_56         (error)
>  _2_3_4____5___6   (error)

   
[delete intermediate comment, collapse examples together, add new
error examples]


> The C<1i> and C<-1i> numbers can be also written
> respectively, C<i> and C<-i>, so the previous example

"...C<i> and C<-i>, respectively, so the previous example..."



> In operations between C<NaN> and other numbers, the result
> is always C<NaN> again.

s/again//


> Moreover, C<NaN> is special in that it is never numerically
> equal to any number, so even the expression C<NaN == NaN>
> is false.
> 
> NOTE: what about C<NaN != NaN>, is it true or false?

It BETTER be true, or my head will explode! 


> For the C<Inf> values, perl will operate them following

Perl

> the standard conventions. For example:

"Standard"?  Standard for whom?  Mathematicians?  Other programming
languages?  (This is an honest question, I'm really don't know.)


> Here C<$P> and C<$N> represent respectively any positive
> and negative values, and C<$X> represents any finite number
> without restrictions (including complex numbers).

Put the above paragraph before the table, and:

"In the following table, C<$P> and C<$N> represent, respectively, any
positive or negative value, while C<$X> represents any finite number
whatsoever (including complex numbers)."  



> This can produce undesired effects when working with
> customs types of numbers, such as BigInt (arbitrary size
> integers) and BigRats (Decimal numbers with a precision
> level greater than the one of native types).

s/customs/certain/
s/Decimal/decimal/
s/the one of native types/any of the native types/

 
> C<7.77666555444333e+20>. When this is number is stored as

s/this is number/this number/

> a BigInt number it has alreadly lost the last digits.

s/number//
s/last/final/

 
> If you need to create BigInt numbers without risking to

s/risking to/risk of/

> lose precision, you should write them as a string literals:

s/lose/losing/
s/as a string/as string/

 
> In that case the conversion to a number type happens

s/number/numeric/



Angel, I hope it doesn't seem like I spilled too much red ink on
you...I really think you did a fabulous job!  


--Dks

Reply via email to