Russian Qt Forum

Qt => Вопросы новичков => Тема начата: alik от Июнь 19, 2016, 14:08



Название: Странное округление вещественной операции
Отправлено: alik от Июнь 19, 2016, 14:08
Всем добрый день.
Столкнулся с непонятной для меня штукой:

когда пишу так
float res = (10 * 360)/36000;
компилятор показывает, что res = 0

когда пишу так
float res = (10 * 360);
res = res/36000;
компилятор показывает, что res = 0.1

Что это за чудеса или я чего то не незнаю про комплиятор C++ ?


Название: Re: Странное округление вещественной операции
Отправлено: kai666_73 от Июнь 19, 2016, 14:25
Попробуйте так:
float res = (10 * 360)/36000.0;

Просто в Си (и в C++) есть операции целочисленного деления/умножения и вещественного...


Название: Re: Странное округление вещественной операции
Отправлено: kambala от Июнь 19, 2016, 14:31
да, выше все правильно сказали: если все операнды целочисленные, то и результат будет целочисленным


Название: Re: Странное округление вещественной операции
Отправлено: alik от Июнь 19, 2016, 14:48
Попробуйте так:
float res = (10 * 360)/36000.0;

Просто в Си (и в C++) есть операции целочисленного деления/умножения и вещественного...

Помогло, спасибо!


Название: Re: Странное округление вещественной операции
Отправлено: Igors от Июнь 19, 2016, 15:04
да, выше все правильно сказали: если все операнды целочисленные, то и результат будет целочисленным
Ну целочисленные разные бывают
Код
C++ (Qt)
int a = 1000 * 1000;
float a2 = a * a;
 
short b = 1000;
float b2 = b * b;
 
qDebug() << a2 << b2;
 
Как объяснить рез-т?


Название: Re: Странное округление вещественной операции
Отправлено: kambala от Июнь 19, 2016, 15:06
теперь надо про переполнение и неявные приведения рассказывать? :)


Название: Re: Странное округление вещественной операции
Отправлено: Igors от Июнь 19, 2016, 15:38
теперь надо про переполнение и неявные приведения рассказывать? :)
А почему нет? Товарищам новичкам будет интересно  :)


Название: Re: Странное округление вещественной операции
Отправлено: kambala от Июнь 19, 2016, 16:44
товарищи пусть язык изучают ;)


Название: Re: Странное округление вещественной операции
Отправлено: ssoft от Июнь 19, 2016, 18:03
Что это за чудеса или я чего то не незнаю про комплиятор C++ ?

Не знаете про язык С++, компилятор не при чем.
Типы участвовавшие в операциях целые => результат целый.
Переменной res присваивается уже результат операций.


Название: Re: Странное округление вещественной операции
Отправлено: Igors от Июнь 20, 2016, 11:10
Не знаете про язык С++, компилятор не при чем.
Типы участвовавшие в операциях целые => результат целый.
Переменной res присваивается уже результат операций.
Так-то оно так, но от Вас я ожидал более глубокого объяснения чем "целый/нецелый".

Еще примерчик для любознательных (которых пока не видно)
Код
C++ (Qt)
unsigned int a = 100;
int b = -2;
float a2 = a - b;
float a3 = b - a;
 
qDebug() << a2 << a3;
 
И уж совсем неприличный  :)
Код
C++ (Qt)
float c = 3.14;
qDebug() << (c == 3.14);