Bookmark and Share

Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

st: Counter-intuitive overflow behavior


From   "Roger B. Newson" <[email protected]>
To   "[email protected]" <[email protected]>
Subject   st: Counter-intuitive overflow behavior
Date   Mon, 27 Feb 2012 21:01:03 +0000

I have a query about -c(mindouble)- and -c(maxdouble)- (see -help creturn- for more about these). I am currently using Stata/MP Version 12.1 (current update level: 06 Feb 2012, which is up to the minute according to -update query-), and I have noticed some very counter-intuitive behavior when I attempt to assign variables of type -double- to values outside the range from -c(mindouble)- to -c(maxdouble)-, which (according to -help creturn-) are "the largest negative number that can be stored in the 8-byte double storage type" and "the largest positive number that can be stored in a double", respectively.

In the -auto- data, if I type

gene double dopey=c(mindouble)-c(maxdouble)

then Stata does its work without error or warning. And, when I then type

tab dopey, m

then Stata replies with


      dopey |      Freq.     Percent        Cum.
------------+-----------------------------------
  -1.8e+308 |         74      100.00      100.00
------------+-----------------------------------
      Total |         74      100.00

This is curious, because, when I type

disp c(mindouble)

Stata gives the value of -8.99e+307, implying that -dopey- contains a negative value of about twice the magnitude that Stata is supposed to allow.

On the other hand, when I type

gene double doc=c(maxdouble)-c(mindouble)

then Stata warns me with

(74 missing values generated)

and when I then type

tab doc, m

then Stata replies with


        doc |      Freq.     Percent        Cum.
------------+-----------------------------------
        .z_ |         74      100.00      100.00
------------+-----------------------------------
      Total |         74      100.00

suggesting that the variable -doc- contains a missing value that I haven't seen mentioned in -help missing-. And what is even more curious is that, if I type

gene double bashful=.z_

then Stata responds with the error message

invalid matrix stripe;
.z_
r(198);

and doesn't generate the new variable requested. This is in contrast to what happens when I generate a new -double- variable with a publicized missing value. As in:

gene double grumpy=.z

to which Stata replies (as expected) with

(74 missing values generated)

and, when I then type

tab grumpy, m

then Stata replies with


     grumpy |      Freq.     Percent        Cum.
------------+-----------------------------------
         .z |         74      100.00      100.00
------------+-----------------------------------
      Total |         74      100.00

(again as expected).

Is this counterintuitive behavior a bug or a feature? I have always assumed that -c(mindouble)- and -c(maxdouble)- are as advertized, and that we can assume that non-missing -double- values can be expected to be in the closed interval between these 2 limits. This doesn't seem to be the case.

Best wishes

Roger

--
Roger B Newson BSc MSc DPhil
Lecturer in Medical Statistics
Respiratory Epidemiology and Public Health Group
National Heart and Lung Institute
Imperial College London
Royal Brompton Campus
Room 33, Emmanuel Kaye Building
1B Manresa Road
London SW3 6LR
UNITED KINGDOM
Tel: +44 (0)20 7352 8121 ext 3381
Fax: +44 (0)20 7351 8322
Email: [email protected]
Web page: http://www.imperial.ac.uk/nhli/r.newson/
Departmental Web page:
http://www1.imperial.ac.uk/medicine/about/divisions/nhli/respiration/popgenetics/reph/

Opinions expressed are those of the author, not of the institution.
*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/


© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index