| www.delorie.com/archives/browse.cgi | search |
| X-Authentication-Warning: | delorie.com: mailnull set sender to djgpp-bounces using -f |
| From: | "Alex Vinokur" <alexvn AT bigfoot DOT com> |
| Newsgroups: | comp.lang.c++,comp.os.msdos.djgpp |
| Subject: | Re: setw & notation |
| Date: | Wed, 24 Apr 2002 07:57:12 +0200 |
| Organization: | Scopus |
| Lines: | 100 |
| Message-ID: | <aa5dsg$80s87$1@ID-79865.news.dfncis.de> |
| References: | <aa37pj$79p7q$1 AT ID-79865 DOT news DOT dfncis DOT de> <3CC55D84 DOT 5FA93D1 AT earthlink DOT net> <aa3nkb$7luo2$1 AT ID-79865 DOT news DOT dfncis DOT de> <3CC59DBB DOT 1000201 AT hotmail DOT com> |
| NNTP-Posting-Host: | gateway.scopus.net (62.90.123.5) |
| X-Trace: | fu-berlin.de 1019624145 8417543 62.90.123.5 (16 [79865]) |
| X-Priority: | 3 |
| X-MSMail-Priority: | Normal |
| X-Newsreader: | Microsoft Outlook Express 6.00.2600.0000 |
| X-MimeOLE: | Produced By Microsoft MimeOLE V6.00.2600.0000 |
| To: | djgpp AT delorie DOT com |
| DJ-Gateway: | from newsgroup comp.os.msdos.djgpp |
| Reply-To: | djgpp AT delorie DOT com |
"Alan Didey" <a_didey AT hotmail DOT com> wrote in message news:3CC59DBB DOT 1000201 AT hotmail DOT com...
[snip]
|
| This program prints numbers without their fractional part (though
| rounded not truncated), or if they are smaller than one, prints only the
| first non-zero decimal place. You have to calculate the precision
| required to do this yourself. Note the use of epsilon() - this is
| important.
|
| #include <iostream>
| #include <limits>
| #include <iomanip>
| #include <cmath>
| using namespace std;
|
| int main()
| {
| // remember the original format of the stream
| ios_base::fmtflags flags = cout.flags();
| streamsize prec = cout.precision();
|
| // we never want scientific notation
| cout.setf(ios_base::fixed, ios_base::floatfield);
|
| // my implementation won't ever print more than 18 decimal places
| for (double d=100000000000000.0; d>=1e-18; d/=10.0) {
| if(d < 1)
| cout.precision(
| // enough precision for one decimal place
| static_cast<streamsize>(
| -log10(d) + 1 - numeric_limits<double>::epsilon()
| )
| );
| else // don't print fractional part of numbers greater than 1
| cout.precision(0);
| cout << d << '\n';
| }
|
| // force the output on to the screen
| cout.flush();
|
| // restore the stream to its former glory
| cout.precision(prec);
| cout.setf(ios_base::fmtflags(0), ios_base::floatfield);
| }
|
| Its output:
[snip]
|
| 0.1
| 0.01
| 0.001
| 0.0001
| 0.00001
| 0.000001
| 0.0000001
| 0.00000001
| 0.000000001
| 0.0000000001
| 0.00000000001
| 0.000000000001
| 0.0000000000001
| 0.00000000000001
| 0.000000000000001
| 0.0000000000000001
| 0.00000000000000001
| 0.000000000000000001
|
|
[snip]
Thanks. It is almost OK.
The only thing I want to change is to see output as following :
0.1
0.01
0.001
0.0001
0.00001
............
Thanks in advance,
====================
Alex Vinokur
http://up.to/alexvn
http://go.to/alexv_math
mailto:alexvn AT bigfoot DOT com
mailto:alexvn AT go DOT to
====================
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |