Jump to content
  • Advertisement
Sign in to follow this  
jamesleighe

Floating Point Constants

This topic is 2178 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

(in c++)

In my code I have a special type that allows me to switch between 'float' and 'double' for at least some portions of the code.

The problem is constants like '0.015' are default double, and generate tonnes of warnings when I switch to 'float' mode. Because of expressions like 'floatn = 1.5'. However, if I append an 'f' to the end of every constant then I could be removing some of the accuracy benefits of doubles in double mode.

What should I do to get rid of these warnings and still allow me to have the benefit of doubles when I compile it with 'floatn' typedef'd to 'float'?

Thank!

Share this post


Link to post
Share on other sites
Advertisement
You could explicitly cast it like:
[source lang="cpp"]#ifdef FLOAT_SUPPORT==1
#define MyFloat(x) float(x)
#else
#define MyFloat(x) double(x)
#end


#define MyConst MyFloat(1.23)



[/source]

Share this post


Link to post
Share on other sites
You could do something like this:
#define USE_FLOAT

#ifdef USE_FLOAT
typedef float Real;
#define CREAL(x) x ## f
#else
typedef double Real;
#define CREAL(x) x
#endif

const Real PI = CREAL(3.14);

Share this post


Link to post
Share on other sites
Then refactor your code so that it's not full of magic numbers?

Create a function that returns the proper data type, and use an ifdef to define it? Feed it a string, and it will return either a float or a double, depending on your definitions.

edit: Wow, ninja'd Edited by Daaark

Share this post


Link to post
Share on other sites

Then refactor your code so that it's not full of magic numbers?


I try not to use magic numbers, the vast majority of the warnings come from initialization and simple arithmetic.


Thanks everyone I'll give your ideas a shot, but I'm still open to more suggestions!

Share this post


Link to post
Share on other sites

Well then it seems highly unlikely you need to worry about loss of precision when converting from float to double, unless your simple arithmetic involves numbers like 23423.4234234098029384233409583405 smile.png

Of course, do note that simple decimal expressions like "0.3" have an infinite number of digits in binary fraction form and will suffer additional rounding if coerced to float.

Share this post


Link to post
Share on other sites
[source]
typedef float real; // or double

real x = real(23.0);
[/source]

I'm not sure why that didn't occur to me last night...

And yeah I'm being anal about precision even though its hardly an issue but it helps for arithmetic with pi or simply 1/3 like the above poster said. Edited by James Leighe

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!