vendredi 27 avril 2018

C++: Is it worth using static_cast to avoid if conditions which compare numbers?

I try to make very time efficient code in C++. I was told that I should avoid if conditions whenever possible. So I was thinking that type conversion could do the job. The code with if condition would look like this:

double a = .512;  // some real number
double x = 1.1;  // a coordinate that gets changed when if condition is true
a *= a;  // a squared
if(a >= 1){x += .1;}

I would avoid the if condition in the following way.

double a = .512;  // some real number
double x = 1.1;  // a coordinate that gets changed when if condition is true
a *= a;  // a squared
x += static_cast<bool>(static_cast<int>(a)) * .1

This first converts a into an int. This gives 0 for a<1 and a non-zero int for a>1. The second conversion then converts all non-zero ints to true. But is it really faster? Are there any problems I could run into using this method?

Aucun commentaire:

Enregistrer un commentaire