FreeBSD(98) 2.0 and later よくある質問 : アプリケーション : printf文を使用したアプリケーションの出力で、符号が含まれている場合に、精度で指定した桁数よりもすくなく表示されるのですが、どうしたらいいですか?
Previous: ktermでマウスをドラッグしてメニューを表示させたのですが、項目を選択できないのですがどうしたらいいですか?
Next: f2cやg77で浮動小数点数の表示がおかしくなるのはどうしてですか?

7.13. printf文を使用したアプリケーションの出力で、符号が含まれている場合に、精度で指定した桁数よりもすくなく表示されるのですが、どうしたらいいですか?

これは、libcのvfprintf.cのバグです。以下の非公式パッチによりISO/ANSI/ JISに適合した出力になります。まず、/usr/src/lib/libc以下が展開されてい る必要があります。/usr/src/lib/libc/stdio.cで以下のパッチを当てて下さ い。そして、/usr/src/lib/libcでmakeしてください。次に、シングルユーザ モードに移り、make installしてください。マルチユーザモードでインストー ルするとハングアップすることがあります。また、/binや/sbinのバイナリの ように、静的リンクされた実行ファイルはコンパイルし直さない限り、変更の 影響は受けません。(変更の必要があればコンパイルし直して下さい。)

<hr>

---------- ここから ----------
*** vfprintf.c.orig	Tue Nov  7 19:10:58 1995
--- vfprintf.c	Tue Nov  7 19:12:48 1995
***************
*** 302,308 ****
  	u_quad_t uqval;		/* %q integers */
  	int base;		/* base for [diouxX] conversion */
  	int dprec;		/* a copy of prec if [diouxX], 0 otherwise */
- 	int fieldsz;		/* field size expanded by sign, etc */
  	int realsz;		/* field size expanded by dprec */
  	int size;		/* size of converted field or string */
  	char *xdigs;		/* digits for [xX] conversion */
--- 302,307 ----
***************
*** 695,706 ****
  		 * Compute actual size, so we know how much to pad.
  		 * fieldsz excludes decimal prec; realsz includes it.
  		 */
! 		fieldsz = size;
  		if (sign)
! 			fieldsz++;
  		else if (flags & HEXPREFIX)
! 			fieldsz += 2;
! 		realsz = dprec > fieldsz ? dprec : fieldsz;
  
  		/* right-adjusting blank padding */
  		if ((flags & (LADJUST|ZEROPAD)) == 0)
--- 694,704 ----
  		 * Compute actual size, so we know how much to pad.
  		 * fieldsz excludes decimal prec; realsz includes it.
  		 */
! 		realsz = dprec > size ? dprec : size;
  		if (sign)
! 		    realsz++;
  		else if (flags & HEXPREFIX)
! 			realsz += 2;
  
  		/* right-adjusting blank padding */
  		if ((flags & (LADJUST|ZEROPAD)) == 0)
***************
*** 720,726 ****
  			PAD(width - realsz, zeroes);
  
  		/* leading zeroes from decimal precision */
! 		PAD(dprec - fieldsz, zeroes);
  
  		/* the string or number proper */
  #ifdef FLOATING_POINT
--- 718,724 ----
  			PAD(width - realsz, zeroes);
  
  		/* leading zeroes from decimal precision */
! 		PAD(dprec - size, zeroes);
  
  		/* the string or number proper */
  #ifdef FLOATING_POINT
---------- ここまで ----------
<hr>


FreeBSD(98) 2.0 and later よくある質問 : アプリケーション : printf文を使用したアプリケーションの出力で、符号が含まれている場合に、精度で指定した桁数よりもすくなく表示されるのですが、どうしたらいいですか?
Previous: ktermでマウスをドラッグしてメニューを表示させたのですが、項目を選択できないのですがどうしたらいいですか?
Next: f2cやg77で浮動小数点数の表示がおかしくなるのはどうしてですか?