Russian Qt Forum
Ноябрь 24, 2024, 19:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Странное округление вещественной операции  (Прочитано 5262 раз)
alik
Гость
« : Июнь 19, 2016, 14:08 »

Всем добрый день.
Столкнулся с непонятной для меня штукой:

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

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

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

Сообщений: 319


Просмотр профиля
« Ответ #1 : Июнь 19, 2016, 14:25 »

Попробуйте так:
float res = (10 * 360)/36000.0;

Просто в Си (и в C++) есть операции целочисленного деления/умножения и вещественного...
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Июнь 19, 2016, 14:31 »

да, выше все правильно сказали: если все операнды целочисленные, то и результат будет целочисленным
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
alik
Гость
« Ответ #3 : Июнь 19, 2016, 14:48 »

Попробуйте так:
float res = (10 * 360)/36000.0;

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

Помогло, спасибо!
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Июнь 19, 2016, 15:04 »

да, выше все правильно сказали: если все операнды целочисленные, то и результат будет целочисленным
Ну целочисленные разные бывают
Код
C++ (Qt)
int a = 1000 * 1000;
float a2 = a * a;
 
short b = 1000;
float b2 = b * b;
 
qDebug() << a2 << b2;
 
Как объяснить рез-т?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #5 : Июнь 19, 2016, 15:06 »

теперь надо про переполнение и неявные приведения рассказывать? Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Июнь 19, 2016, 15:38 »

теперь надо про переполнение и неявные приведения рассказывать? Улыбающийся
А почему нет? Товарищам новичкам будет интересно  Улыбающийся
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #7 : Июнь 19, 2016, 16:44 »

товарищи пусть язык изучают Подмигивающий
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
ssoft
Программист
*****
Offline Offline

Сообщений: 584


Просмотр профиля
« Ответ #8 : Июнь 19, 2016, 18:03 »

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

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

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Июнь 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);
 
« Последнее редактирование: Июнь 20, 2016, 11:20 от Igors » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.26 секунд. Запросов: 23.