Re: Why is using single-precision slower than using double-precision

hebert@prism.uvsq.fr (Renaud HEBERT)
Thu, 24 Nov 1994 08:50:17 GMT

          From comp.compilers

Related articles
[10 earlier articles]
Re: Why is using single-precision slower than using double-precision trobey@taos.arc.unm.edu (1994-11-23)
Re: Why is using single-precision slower than using double-precision kenneta@hubcap.clemson.edu (1994-11-23)
Re: Why is using single-precision slower than using double-precision dik@cwi.nl (1994-11-24)
Re: Why is using single-precision slower than using double-precision davidc@panix.com (David B. Chorlian) (1994-11-24)
Re: Why is using single-precision slower than using double-precision roedy@BIX.com (1994-11-30)
Re: Why is using single-precision slower than using double-precision tgl@netcom.com (1994-11-30)
Re: Why is using single-precision slower than using double-precision hebert@prism.uvsq.fr (1994-11-24)
Re: Why is using single-precision slower than using double-precision dekker@dutiag.twi.tudelft.nl (Rene Dekker) (1994-11-30)
Re: Why is using single-precision slower than using double-precision meissner@osf.org (1994-11-24)
| List of all articles for this month |

Newsgroups: comp.parallel,comp.arch,comp.compilers
From: hebert@prism.uvsq.fr (Renaud HEBERT)
Keywords: arithmetic, C
Organization: Laboratoire PRiSM - Universite de Versailles-St Quentin - France
References: <3aqv5k$e27@monalisa.usc.edu> <3b07cs$mdv@hubcap.clemson.edu>
Date: Thu, 24 Nov 1994 08:50:17 GMT

Did you used float constant when you were calculating in single precision?
Remenber that floating points constants are double and that if you have
float x,y;
y = 5.0 * x; here you have (double) * (float) -> (float) so in C you have the
following:
y = (float)(5.0 * (double)x) so you have two conversions..


On the other hand if you have
float x,y;
y = 5.0f * x;
              ^a single-precision constant
  Here you have an operation between two float, I thought that the
compiler would generate the following (float) * (float) -> (float). But everyone
here is telling that the compiler will generate
y = (float)((double)5.0f * (double)x)
^^^of course this isn't a true conversion here.


Well if you want to know what's going on, the only way is to look at the assembly


I've compiled on a sun y = 5.0f * x; (y,x float) with gcc -O2
  the multiply instruction is
fmuls %f0,%f2,%f0 (single precision multiply) and it seems that there
isn't any conversion (I don't know sparc assembly...).


So why all these people talked about an automatic conversion ?
Because they are too lazy to insert a "f" after their constants :-).
But it may depends on the compiler though.


Regards.


Renaud HEBERT
--


Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.