После прочтения нескольких SO-сообщений на эту тему я все еще в замешательстве, в основном касательно целочисленных и логических переменных / выражений.
A. Целочисленные выражения
Предположим, я хочу использовать выражение по модулю в вычислениях с плавающей запятой, что, если оно есть, является наиболее правильным из следующих? Есть ли разница между C и C ++? или я должен просто доверить компилятору правильное преобразование?
double sign;
int num = rand() % 100;
//want to map odd num to -1.0 and even num to 1.0
//A
sign = -2 * (num % 2) + 1;
//B
sign = -2.0 * (num % 2) + 1;
//C
sign = -2.0 * (num % 2) + 1.0;
//D
sign = -2 * (num % 2) + 1.0;
//E
sign = -2 * (double)(num % 2) + 1;
//F
sign = -2.0 * (double)(num % 2) + 1;
//G
sign = -2.0 * (double)(num % 2) + 1.0;
//H
sign = -2 * (double)(num % 2) + 1.0;
B. Булевы выражения
Могу ли я использовать логическое выражение безопасно в качестве элемента в вычислениях с плавающей запятой / целыми числами без явного приведения? Есть ли разница между C и C ++?
double d_res = 1.0;
int i_res = 1;
int num = rand() % 10;
d_res = d_res + (num > 5);//or d_res = d_res + (double)(num > 5)?
i_res += (num > 5);//or i_res += (int)(num > 5)?