From: GOTO Kentaro Date: 2002-09-10T12:47:49+09:00 Subject: [ruby-dev:18247] Re: missing/vsnprintf.c: printf("%+f", -0.0) At Tue, 10 Sep 2002 12:21:10 +0900, WATANABE Hirofumi wrote: > > printf("%+f", -0.0) prints "+0.0000000" if missing/vsnprintf.c is used. > > ここでちょっとひっかかるんですが、missing/vsnprintf.cでは > /* > #define FLOATING_POINT > */ > となっていてdefaultの状態では%fすらサポートされません。 > #ということに今気づいた。 > なので"f"という表示になるはずなんですが、どこかでdefineして > るんでしょうか? テストしたわけではないので、printf("%+f", -0.0) *seems to print* "+0.0000000" if ... と書くべきでした。 > FLOATING_POINTをdefineしてもBSD__dtoaがundefined referenceになります。 > つまりどこかからBSD__dtoaを取ってこない限り、BSDじゃないとテ > ストできない…。 そうそう。このコードが使われているプラットフォームの実例って どこなんでしょ? なんとなくその実例決めうちなんじゃないかと いう気が。sunos4 とか? > それはそれとしてmsvcrtでテストしてみると、同じバグがあるようです。 ふうむ。負の零の存在はあまり知られていないのかな。他にもある のかも知れませんね。 ちなみに現状では Math::copysign はないので、pack してビット をみるか、有限の数を割って零との大小比較をするしかRubyで符号 を確実に見ることができるポータブルな方法がないことになります。 -- Gotoken