C: вычесть двойное из целого числа

У меня есть вопрос, который может сэкономить много времени на отладку для многих людей...

Дана функция:

void my_func(double value)

Есть ли разница между двумя следующими строками кода?

double my_value = 1 - value;

а также

double my_value = 1.0 - value;

Т.е. учитывая что value является doubleесли я использую 1 - valueМогу ли я чувствовать себя в безопасности, что результат будет правильным реальным числом, как при использовании 1.0 - value?

5 ответов

Решение

Нет никакой разницы. Вычесть double из int, int должен быть повышен до double, Я лично предпочитаю использовать 1.0 потому что я думаю, это проясняет, что это не целочисленное вычитание. Но это чисто вопрос стиля.

Да, вы предполагаете правильно, но для более сложных выражений вы должны быть очень осторожны при смешивании целочисленных значений и значений с плавающей запятой. Например, невинно выглядящий код:

double x = 1 / 2;

будет хранить 0 в x потому что вычисление сделано на int значения и результат преобразуется в double,

Ты прав. Оператор - работает с объектами одного типа. Здесь есть неявный тип беседы, и int конвертируется в double.

Обратите внимание, что это может быть источником ошибок при смешивании типов со знаком и без знака.

В вашем примере оба будут вести себя одинаково

Т.е. учитывая, что значение равно двойному, если я использую 1 -значение, могу ли я чувствовать себя в безопасности, что результатом будет правильное действительное число, как при использовании значения 1,0?

С 1.0 - value Кроме того, вы не можете гарантировать, что это будет правильное действительное число. Проверьте некоторые документы для арифметики с плавающей точкой.

Если любой из операндов арифметического оператора является плавающей точкой, вычисление выполняется в арифметике с плавающей точкой. Вычисление выполняется в двойном виде, если оба операнда не являются числами с плавающей точкой, в этом случае вычисление выполняется с плавающей точкой.

Другие вопросы по тегам