linux-c-programming.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Charlie Gordon" <gmane@chqrlie.org>
To: linux-c-programming@vger.kernel.org
Subject: Re: complex variable
Date: Mon, 13 Sep 2004 21:32:06 +0200	[thread overview]
Message-ID: <ci4sid$kgu$1@sea.gmane.org> (raw)
In-Reply-To: 20040910200519.GJ19967@lug-owl.de

"Jan-Benedict Glaw" <jbglaw@lug-owl.de> wrote in message
news:20040910200519.GJ19967@lug-owl.de...

> Right, too. Here's how it ought to work:

-----------------------------------------------------------
#include <complex.h>
#include <stdio.h>
#include <stdlib.h>

int
main (int argc, char *argv[])
{
 complex co;

 co = 1.3 + I * 2.9;
 printf ("%lf %lf\n", creal (co), cimag (co));

 return EXIT_SUCCESS;
}
-----------------------------------------------------------

> So you basically use creal() and cimag() to access the two numbers.

Well it is still too vague :
- what is the floating type of complex variable co ?
- You did not specify float, double or long double, so what is the default ?
- Reading tens of pages from C99 leaves that question open (!)
- The creal and cimag macros apply to all 3 complex types.
- if it is float, then real and imaginary parts will be converted to double
when passed to printf.
- If it is long double, they will be passed as such, but the format
specifier will be incorrect.
- Why do you use %lf ? %lf means double in fscanf, it is meaningless in
printf.
- If you meant long double, you should specify %Lf.

Consequently, I think it should read:

double complex co; ...
printf ("%f %f\n", creal(co), cimag(co));

or

complex co;
printf ("%f %f\n", (double)creal(co), (double)cimag(co));

just to be safe.

C is not very user friendly for floating point stuff.  A lot of confusion
arises from historical lack of consistency in the libraries.  A lot of
newbie C programmers will naturally use the float type instead of double.
Yet it is both less precise than even 32 bit ints, less efficient because of
the extra conversions, and slower on today's processors...  Aside from hard
core SIMD and 3D afficionados, that will hand code their stuff in assembly,
'float' is pretty much obsolete.

Chqrlie.

PS: I have always hated floating point stuff ;-)




  reply	other threads:[~2004-09-13 19:32 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-09-07 15:37 complex variable Huber, George K RDECOM CERDEC STCD SRI
2004-09-07 16:05 ` Jan-Benedict Glaw
2004-09-08  9:59 ` Charlie Gordon
2004-09-08 12:06   ` Jan-Benedict Glaw
2004-09-08 16:25     ` Ankit Jain
2004-09-08 21:54     ` Charlie Gordon
2004-09-10 20:05       ` Jan-Benedict Glaw
2004-09-13 19:32         ` Charlie Gordon [this message]
2004-09-13 21:57           ` Jan-Benedict Glaw
2004-09-14  8:16             ` Charlie Gordon
  -- strict thread matches above, loose matches on Subject: below --
2004-09-08 18:40 Huber, George K RDECOM CERDEC STCD SRI
2004-09-10 20:09 ` Jan-Benedict Glaw
     [not found] <20040906134525.33692.qmail@web52908.mail.yahoo.com>
2004-09-06 16:25 ` Ankit Jain
2004-09-06 16:37   ` Jan-Benedict Glaw

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='ci4sid$kgu$1@sea.gmane.org' \
    --to=gmane@chqrlie.org \
    --cc=linux-c-programming@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).