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
Кроме того, вы не можете гарантировать, что это будет правильное действительное число. Проверьте некоторые документы для арифметики с плавающей точкой.
Если любой из операндов арифметического оператора является плавающей точкой, вычисление выполняется в арифметике с плавающей точкой. Вычисление выполняется в двойном виде, если оба операнда не являются числами с плавающей точкой, в этом случае вычисление выполняется с плавающей точкой.