vfprintf.c (5707) | vfprintf.c (7033) |
---|---|
1/*- 2 * Copyright (c) 1990, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Chris Torek. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 488 unchanged lines hidden (view full) --- 497 if ((long)ulval < 0) { 498 ulval = -ulval; 499 sign = '-'; 500 } 501 } 502 base = 10; 503 goto number; 504#ifdef FLOATING_POINT | 1/*- 2 * Copyright (c) 1990, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Chris Torek. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 488 unchanged lines hidden (view full) --- 497 if ((long)ulval < 0) { 498 ulval = -ulval; 499 sign = '-'; 500 } 501 } 502 base = 10; 503 goto number; 504#ifdef FLOATING_POINT |
505 case 'e': /* anomalous precision */ | 505 case 'e': |
506 case 'E': | 506 case 'E': |
507 prec = (prec == -1) ? 508 DEFPREC + 1 : prec + 1; 509 /* FALLTHROUGH */ 510 case 'f': /* always print trailing zeroes */ 511 if (prec != 0) 512 flags |= ALT; | 507 case 'f': 508 goto fp_begin; |
513 case 'g': 514 case 'G': | 509 case 'g': 510 case 'G': |
515 if (prec == -1) | 511 if (prec == 0) 512 prec = 1; 513fp_begin: if (prec == -1) |
516 prec = DEFPREC; | 514 prec = DEFPREC; |
517fp_begin: _double = va_arg(ap, double); | 515 if (flags & LONGDBL) 516 _double = (double)va_arg(ap, long double); 517 else 518 _double = va_arg(ap, double); |
518 /* do this before tricky precision changes */ 519 if (isinf(_double)) { 520 if (_double < 0) 521 sign = '-'; 522 cp = "Inf"; 523 size = 3; 524 break; 525 } --- 197 unchanged lines hidden (view full) --- 723 724 /* the string or number proper */ 725#ifdef FLOATING_POINT 726 if ((flags & FPT) == 0) { 727 PRINT(cp, size); 728 } else { /* glue together f_p fragments */ 729 if (ch >= 'f') { /* 'f' or 'g' */ 730 if (_double == 0) { | 519 /* do this before tricky precision changes */ 520 if (isinf(_double)) { 521 if (_double < 0) 522 sign = '-'; 523 cp = "Inf"; 524 size = 3; 525 break; 526 } --- 197 unchanged lines hidden (view full) --- 724 725 /* the string or number proper */ 726#ifdef FLOATING_POINT 727 if ((flags & FPT) == 0) { 728 PRINT(cp, size); 729 } else { /* glue together f_p fragments */ 730 if (ch >= 'f') { /* 'f' or 'g' */ 731 if (_double == 0) { |
731 /* kludge for __dtoa irregularity */ 732 if (prec == 0 || 733 (flags & ALT) == 0) { | 732 /* kludge for __dtoa irregularity */ 733 if (prec == 0 && (flags & ALT) == 0) { |
734 PRINT("0", 1); 735 } else { 736 PRINT("0.", 2); 737 PAD(ndig - 1, zeroes); 738 } 739 } else if (expt <= 0) { 740 PRINT("0.", 2); 741 PAD(-expt, zeroes); --- 52 unchanged lines hidden (view full) --- 794 double value; 795 int ndigits, flags, *decpt, ch, *length; 796 char *sign; 797{ 798 int mode, dsgn; 799 char *digits, *bp, *rve; 800 801 if (ch == 'f') | 734 PRINT("0", 1); 735 } else { 736 PRINT("0.", 2); 737 PAD(ndig - 1, zeroes); 738 } 739 } else if (expt <= 0) { 740 PRINT("0.", 2); 741 PAD(-expt, zeroes); --- 52 unchanged lines hidden (view full) --- 794 double value; 795 int ndigits, flags, *decpt, ch, *length; 796 char *sign; 797{ 798 int mode, dsgn; 799 char *digits, *bp, *rve; 800 801 if (ch == 'f') |
802 mode = 3; | 802 mode = 3; /* ndigits after the decimal point */ |
803 else { | 803 else { |
804 mode = 2; | 804 /* 805 * To obtain ndigits after the decimal point for the 'e' 806 * and 'E' formats, round to ndigits + 1 significant 807 * figures. 808 */ 809 if (ch == 'e' || ch == 'E') 810 ndigits++; 811 mode = 2; /* ndigits significant digits */ |
805 } 806 if (value < 0) { 807 value = -value; 808 *sign = '-'; 809 } else 810 *sign = '\000'; 811 digits = __dtoa(value, mode, ndigits, decpt, &dsgn, &rve); | 812 } 813 if (value < 0) { 814 value = -value; 815 *sign = '-'; 816 } else 817 *sign = '\000'; 818 digits = __dtoa(value, mode, ndigits, decpt, &dsgn, &rve); |
812 if (flags & ALT) { /* Print trailing zeros */ | 819 if ((ch != 'g' && ch != 'G') || flags & ALT) { 820 /* print trailing zeros */ |
813 bp = digits + ndigits; 814 if (ch == 'f') { 815 if (*digits == '0' && value) 816 *decpt = -ndigits + 1; 817 bp += *decpt; 818 } 819 if (value == 0) /* kludge for __dtoa irregularity */ 820 rve = bp; --- 38 unchanged lines hidden --- | 821 bp = digits + ndigits; 822 if (ch == 'f') { 823 if (*digits == '0' && value) 824 *decpt = -ndigits + 1; 825 bp += *decpt; 826 } 827 if (value == 0) /* kludge for __dtoa irregularity */ 828 rve = bp; --- 38 unchanged lines hidden --- |