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 |