Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between upper and lower case double (float) type specifiers in C

In C double/float has a set type specifiers: %f %F %g %G %e %E. Is there any difference between

  • %f and %F,
  • %g and %G,
  • %e and %E?

According to printf and scanf the output is equal. Then why both upper and lower cases are valid?

Note that type specifiers for scanf double are starting with lowercase l

like image 496
yanpas Avatar asked Jan 10 '16 13:01

yanpas


Video Answer


2 Answers

The difference between %f and %F are if they print infinity and NaN as lower case or upper case. Here is an example:

#include <stdio.h>
#include <math.h>

int main(){
    printf("%f and %f\n", INFINITY, nan("0"));    //Prints "inf and nan"
    printf("%F and %F\n", INFINITY, nan("0"));    //Prints "INF and NAN"
    return 0;
}

%f and %F are identical when printing real numbers. For example, printf("%f", 1.0) and printf("%F", 1.0) do exactly the same thing.

Note that %F is only available in C99 or C++.

The difference between %e and %E is if the "e" that separates the number and the exponent is lower or upper case (for example 1.0e+0 or 1.0E+0. It also makes a difference for infinity and Nan just like for %f and %F. Here is an example:

#include <stdio.h>
#include <math.h>

int main(){
    printf("%e, %e and %e\n", INFINITY, nan("0"), 1.0); //Prints "inf, nan and 1.0000e+00"
    printf("%E, %E and %E\n", INFINITY, nan("0"), 1.0); //Prints "INF, NAN and 1.0000E+00"
    return 0;
}

The difference between %g and %G is that %g takes the shortest between %e and %f, and %G takes the shortest between %E and %F.

like image 108
Donald Duck Avatar answered Oct 19 '22 04:10

Donald Duck


specifier   Output  Example
d or i  Signed decimal integer  392
u   Unsigned decimal integer    7235
o   Unsigned octal  610
x   Unsigned hexadecimal integer    7fa
X   Unsigned hexadecimal integer (uppercase)    7FA
f   Decimal floating point, lowercase   392.65
F   Decimal floating point, uppercase   392.65
e   Scientific notation (mantissa/exponent), lowercase  3.9265e+2
E   Scientific notation (mantissa/exponent), uppercase  3.9265E+2
g   Use the shortest representation: %e or %f   392.65
G   Use the shortest representation: %E or %F   392.65
a   Hexadecimal floating point, lowercase   -0xc.90fep-2
A   Hexadecimal floating point, uppercase   -0XC.90FEP-2
c   Character   a
s   String of characters    sample
p   Pointer address b8000000
n   Nothing printed.
The corresponding argument must be a pointer to a signed int.
The number of characters written so far is stored in the pointed location.  
%   A % followed by another % character will write a single % to the stream.    %

The Source of above

like image 24
LORDTEK Avatar answered Oct 19 '22 03:10

LORDTEK