Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Арифметические действия с переменными


Автор: VAZik 22.8.2005, 13:43
Уважаемые господа программеры!
Может быть я вам покажусь беспросветным ламерюгой, но почему BCB 6.0 удачно компилирует следующее

Код

a = y1 - y2;
a = 1/a;


а в следующей записи переменная a просто остается равной нулю.

Код

a = 1/(y1 - y2);


Объясните мне, пожалуйста!!!

Автор: Dark Elf 22.8.2005, 13:56
Потому что в Билдере 6 надо делать так :

Код

a = (long double)1/(y1 - y2);

Автор: _hunter 22.8.2005, 13:57
потому как ты к инту результат приводиш.
пиши 1.0/(y1 - y2);

Автор: monax 22.8.2005, 15:47
Dark Elf и _hunter, какие-то страшные вещи рассказываете.
Код

    double a,y1,y2;
    y1=3;y2=5;
    a=1/(y2-y1);

Этот код прекрасно работает и выводит 0.5.
VAZik, а какой результат у действия y1 - y2? Может там что-то настолько большое, что результату от деления не хватает места в double, т.е. там получается маленькое число, которое в машине округляется до нуля.

Автор: maxim1000 22.8.2005, 15:52
Цитата
Этот код прекрасно работает и выводит 0.5

этот - да
но есть сильное подозрение, что у автора вопроса другой, например, такой:
Код

double a;
int y1,y2;
y1=3;y2=5;
a=1/(y2-y1);

Автор: VAZik 23.8.2005, 06:44
Всем спасибо за советы. В результате получилось рабочее выражение

Код

a = 1.0 / (y1 - y2);


monax, с выражением y1-y2 все нормально. Скорее всего проблема действительно была в неявном преобразовании типов.

Автор: VAZik 23.8.2005, 07:16
Еще вопрос. А с выражением типа

Код

a = y1 / (y1 - y2) - x2 / (x1 - x2);


что делать?

Все x и y - int, а a - float.

Сразу скажу что-то типа

Код

y1 = static_cast<float>(y1);


писать не очень хочется.

Автор: VAZik 23.8.2005, 07:32
Последний вопрос - мой затуп. Все нормально компилируется и так.

Автор: Дрон 23.8.2005, 12:58
Цитата(VAZik @ 23.8.2005, 08:32)
Последний вопрос - мой затуп. Все нормально компилируется и так.

Если всё компилируется, это ещё не значит, что будет правильно работать.

Напиши хотя бы так:
Код
a = (float)y1 / (y1 - y2) - (float)x2 / (x1 - x2);

Этого будет достаточно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)