🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

6 total messages Started by Tsuyoshi Moriya Tue, 07 Apr 1998 00:00
printf() で少数の表示規則
#401
Author: Tsuyoshi Moriya
Date: Tue, 07 Apr 1998 00:00
43 lines
1514 bytes
森谷@SCC札幌です。

double(float)をprintfで、表示する時の規則について疑問があります。

小数点以下をたとえば第2位まで表示するプログラムがあった場合、
printf時には、四捨五入されるというものではないのでしょうか?

以下のプログラムと結果は、HP-UX9.07でコンパイル実行しました。
(コンパイラは、cc、gccで行ってみましたが、同じ結果でした。)
この結果からは、規則性が見出せなかったのですが、
何か、変換規則みたいなものはあるのでしょうか?
よろしく、お願いいたします。

●ソース
void main(void)
{
	double	d;
	int	i;

        (void)printf("VAL = %.2lf\n", (float)0.044);
	(void)printf("VAL = %.2lf\n", (float)0.045);

	(void)printf("VAL = %.2lf\n", 0.045);
	(void)printf("VAL = %.2lf\n", 0.046);

	d = (double)0.0;
	for (i = 0; i < 45; i ++) {
		d += (double)0.001;
	}
	(void)printf("VAL = %.2lf\n", d);
	(void)printf("VAL = %lf\n", d);


}

●結果
VAL = 0.04
VAL = 0.05
VAL = 0.04
VAL = 0.05
VAL = 0.05
VAL = 0.045
Re: printf() で少数の表示規則
#403
Author: Masao Seki
Date: Wed, 08 Apr 1998 00:00
26 lines
1592 bytes
こんにちは、関と申します。

Tsuyoshi Moriya wrote:
> 
> 森谷@SCC札幌です。
> 
> double(float)をprintfで、表示する時の規則について疑問があります。
> 
> 小数点以下をたとえば第2位まで表示するプログラムがあった場合、
> printf時には、四捨五入されるというものではないのでしょうか?

第2位まで表示するのであれば、第3位で四捨五入されます。但し、この
第3位の値は、printfなどで表示される「丸められた値」の第3位ではなく、
計算機内部の16進データを正確に10進数に直した値の第3位です。
(10進の0.045は、16進では0.0b851eb851e・・と続く無現小数なので
どこかで打ち切った近似値が格納されています。)

確認用プログラムで、例えば
        (void)printf("VAL = %.2f <- %.18f\n", 0.045, 0.045);
とでもして頂ければ、ご納得頂けるかと思います。

尚、printf文で「%f」を「l」で修飾するのは有害無益です。

--
関 正生 <masao.seki@fujixerox.co.jp || ma-seki@gb3.so-net.or.jp>
Re: printf() $B$G>/?t$NI=<(5,B'(B
#404
Author: Satoshi Takahashi
Date: Wed, 08 Apr 1998 00:00
14 lines
873 bytes
In article <6gd9q0$1ng$1@fu.bekkoame.or.jp>
moriya@ppp.bekkoame.or.jp (Tsuyoshi Moriya) wrote:
> $B>.?tE@0J2<$r$?$H$($PBh(B2$B0L$^$GI=<($9$k%W%m%0%i%`$,$"$C$?>l9g!"(B
> printf$B;~$K$O!";M<N8^F~$5$l$k$H$$$&$b$N$G$O$J$$$N$G$7$g$&$+!)(B

10$B?J?t$G9M$($k$N$,4V0c$$$G$9$M!%(B

0.045 $B$J$I$O!$%3%s%T%e!<%?$NCf$G@53N$KI=$o$9$3$H$,$G$-$^$;$s!%(B

$B!t(BCOBOL $B$d(B BASIC $B$G$OI=$o$;$?$+$b!%(B

-- 
Satoshi Takahashi
Re: printf() で少数の表示規則
#406
Author: KATAYAMA Yoshio
Date: Wed, 08 Apr 1998 00:00
46 lines
2001 bytes
$BJR;3!w#P#F#U$G$9!#(B

In article <6gd9q0$1ng$1@fu.bekkoame.or.jp>,
	moriya@ppp.bekkoame.or.jp (Tsuyoshi Moriya) writes:

>double$B!J(Bfloat$B!K$r(Bprintf$B$G!"I=<($9$k;~$N5,B'$K$D$$$F5?Ld$,$"$j$^$9!#(B

>$B>.?tE@0J2<$r$?$H$($PBh(B2$B0L$^$GI=<($9$k%W%m%0%i%`$,$"$C$?>l9g!"(B
>printf$B;~$K$O!";M<N8^F~$5$l$k$H$$$&$b$N$G$O$J$$$N$G$7$g$&$+!)(B

ANSI C $B$G$O!"!H(BThe value is rounded to the appropriate number of 
digits.$B!I$H$J$C$F$$$^$9$+$i!";M<N8^F~$5$l$k$H9M$($F$$$$$G$7$g$&!#(B

$B!t!H(Bround$B!I$ODj5A$5$l$F$J$+$C$?$h$&$J!"!"!"(B

>$B0J2<$N%W%m%0%i%`$H7k2L$O!"(BHP-UX9.07$B$G%3%s%Q%$%k<B9T$7$^$7$?!#(B
>$B!J%3%s%Q%$%i$O!"(Bcc$B!"(Bgcc$B$G9T$C$F$_$^$7$?$,!"F1$87k2L$G$7$?!#!K(B
>$B$3$N7k2L$+$i$O!"5,B'@-$,8+=P$;$J$+$C$?$N$G$9$,!"(B

$B$O$C$-$j$7$F$^$9$h!#(B

>        (void)printf("VAL = %.2lf\n", (float)0.044);
>	(void)printf("VAL = %.2lf\n", (float)0.045);
>	(void)printf("VAL = %.2lf\n", 0.045);
>	(void)printf("VAL = %.2lf\n", 0.046);

$B=PNO$7$h$&$H$7$F$$$kCM$O!"IbF0>/?tE@?t$,(B IEEE $B7A<0$N>l9g!"(B

(float)0.044   0.0439999997615814208984375
(float)0.045   0.04500000178813934326171875
       0.045   0.04499999999999999833466546306226518936455249786376953125
       0.046   0.04599999999999999922284388276239042170345783233642578125
           d   0.045000000000000033029134982598407077603042125701904296875

$B$G$9!#$3$l$r!">/?tE@0J2<Bh#30L$G;M<N8^F~$9$l$P!"(B

>VAL = 0.04
>VAL = 0.05
>VAL = 0.04
>VAL = 0.05
>VAL = 0.05

$B$H$J$j$^$9!#(B
--
$BJR;3!w#P#F#U(B
Re: printf() で少数の表示規則
#407
Author: Kouichi Kumon
Date: Wed, 08 Apr 1998 00:00
79 lines
3668 bytes
In article <6gd9q0$1ng$1@fu.bekkoame.or.jp> moriya@ppp.bekkoame.or.jp (Tsuyoshi Moriya) writes:
> $B?9C+!w#S#C#C;%KZ$G$9!#(B
> double$B!J(Bfloat$B!K$r(Bprintf$B$G!"I=<($9$k;~$N5,B'$K$D$$$F5?Ld$,$"$j$^$9!#(B
> $B>.?tE@0J2<$r$?$H$($PBh(B2$B0L$^$GI=<($9$k%W%m%0%i%`$,$"$C$?>l9g!"(B
> printf$B;~$K$O!";M<N8^F~$5$l$k$H$$$&$b$N$G$O$J$$$N$G$7$g$&$+!)(B

$BCM$,(B0.045$B$N>l9g!"(B2$B?JI=8=$G$OL58B>.?t(B($B=[4D>.?t(B)$B$K$J$C$F$7$^$$$^$9!#(B

$B6qBNE*$K$O<!$NDL$j$G$9(B

16$B?JI=8=$@$H(B 0.0b851eb851eb851eb851eb...... $B0J2<(Bb851e$B$N7+$jJV$7(B
2$B?JI=8=$@$H(B 0.000010111000010100011110101110000101000111101011100001010...
$B!t$3$N>l9g$O7+$jJV$7ItJ,$r(B2$B?J$G$b(B16$B?J$G$b$*$J$8$h$&$KI=$;$^$9!#(B

0.045$B$O(B2$B?J?t$G$OL58B>.?t$G$9$+$i!"7W;;5!FbIt$G$O$=$N$^$^$NCM$G$O$J$/M-(B
$B8B7e$GI=$9$3$H$,=PMh$k6a;wCM$K$h$C$FI=$5$l$^$9!#$3$l$O!"DL>o$O%3%s%Q%$(B
$B%i$,%3%s%Q%$%k$9$k:]$+!"%"%;%s%V%i$,%"%;%s%V%k$9$k:]$N=hM}$N$I$A$i$+$G(B
$B9T$J$o$l$^$9!#(B

$B$b$7!"(B0.045$B$N7e?t$rM-8B$K$9$k:]$KL58B$KB3$/ItJ,$r@Z$j<N$F$l$P!"$=$NCM(B
$B$O(B0.045$BL$K~$NCM$K$J$j$^$9!#$D$^$j!";M<N8^F~$7$?$i@Z$j<N$F$i$l$k$3$H$K(B
$B$J$j$^$9!#(B

$B<B:]$NFbItI=8=$r8+$F$_$k5$$,$"$l$P!"(B

int	 /* main$B$rJV$jCM(Bvoid$B$G@k8@$9$k$N$O9%$^$7$/$"$j$^$;$s(B*/
main(void)
{
    union {
	double d;
	int i[2];
    } x;

    x.d = 0.045;
    printf("%08x %08x\n", x.i[0], x.i[1]);

    return 0;
}

$B0[$J$C$?CM$rI=<($7$?APJ}$N%7%9%F%`$G$3$N%W%m%0%i%`$r<B9T$7$F$_$k$H!"Kv(B
$BHx$NCM$,$A$g$C$H0c$&$N$,8+$i$l$k$+$bCN$l$^$;$s!#(B

---------------
$B;d$,<B83$7$?HO0O$G$O<!$NDL$j(B
	SUN-OS4(GCC)$B$H(B	SUN-OS4(CC)
	$B7k2L(B	3fa70a3d 70a3d70a

	Linux X86(GCC)$B$H(BNT X86(VC++4.0)
	$B7k2L(B	70a3d70a 3fa70a3d
	($BIbF0>.?t$N3JG<=g=x$H(Bendian$B$N4X78$GA08e$,F~$lBX$o$C$F$$$k$,F1$8$b$N(B)

$B!t(B(SunOS$B$N(BCC$B$OHs(BANSI$B$J$N$G!"0z?t$N(Bvoid$B$r30$7$F%3%s%Q%$%k$7$F$$$^$9(B)

$BD4$Y$?%7%9%F%`$O$9$Y$F(BIEEE754$B=`5r$NI=8=7A<0$GIbF0>.?t$rI=$7$F$$$^$9!#(B
$B$^$?!"(BENDIAN$B$N0c$$$r=|$/$HCM$OF1$8$b$N$G$9!#(B

---------------
SUN$B$N7k2L$r8+$k$H!"(B3fa70a3d 70a3d70a $B$G$9$,!"<!$N$3$H$r<($7$F$$$^$9!#(B
	$BId9f$H;X?tIt(B (3fa)
	0011 1111 1010
	$B2>?tIt$N@hF,$N(B1$B$r>J$$$?$b$N(B (70a3d70a3d70a)
	0111 0000 1010 0011 1101 0111 0000 1010 0011 1101 0111 0000 1010

$B2>?tIt$O!"@h$[$I(B0.045$B$rFs?JI=8=$7$?$b$N$+$i:G=i$K=P$F$/$k(B1$B$r=|$$$?ItJ,(B
$B$KAjEv$7$^$9!#(B($B>\$7$/$O(BIEEE754$B$N2r@b$G$b8+$F2<$5$$(B)

$B$3$3$GI=8=$5$l$F$$$k(B2$B?J>.?t$O(B
	0.000010111000010100011110101110000101000111101011100001010
$B$G$9$,!"(B0.045$B$N??$NCM$O!"$3$N8e$m$K(B
01110000101000111101011100001010...$B$HB3$-$^$9!#(B
$B$9$J$o$A!"$3$NI=8=$G$O8e$m$,@Z$j<N$F$i$l$F$$$k$N$G$9!#(B

$B@Z$j<N$F$i$l$?7k2L!"(B0.045$B$h$j$b$A$g$C$H>.$5$$CM$K$J$C$F$7$^$C$?$N$G!"(B
$B;M<N8^F~$N7k2L(B0.04$B$HI=<($5$l$F$7$^$C$?$H9M$($i$l$^$9!#(B
--
			$B5WLg9L0l!wIY;NDL8&5f=j(B
			kumon@flab.fujitsu.co.jp
			$BBeI=(B 044-777-1111
Re: printf() で少数の表示規則
#414
Author: Tsuyoshi Moriya
Date: Fri, 10 Apr 1998 00:00
4 lines
635 bytes
森谷@SCC札幌です。

大変わかりやすいフォローを有り難うございました。
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads