Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
4 / 4 / 0
Регистрация: 25.09.2010
Сообщений: 134

Что лучше float(1) или (float)1?

20.09.2024, 07:57. Показов 2281. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно вычислить чему равна дробь 1/2
вычисление в лоб дают результат 0, то есть cout<<1/2<<endl; выводит 0

как делать лучше

C++
1
 cout<<float(1)/2<<endl;
C++
1
 cout<<(float)1/2<<endl;
варианты

C++
1
 cout<<1.f/2<<endl;
C++
1
 cout<<1. /2<<endl;
использовать нельзя
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.09.2024, 07:57
Ответы с готовыми решениями:

опять ошибка.на этот раз cannot convert `float (*)(float)' to `float' in argument passing
#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;math.h&gt; float f1(float x)/*vira*enie 1*/ {return (x*cos(x))/(1+ pow(x,2));} ...

Какой тип данных лучше подойдет для приложения, которое делит числа int или float?
Ответ написал int Хотя нутром чую, что float

Чем отличаются float преобразования (float)var от float(var)
Здравствуйте! Подскажите, чем отличается (float)var от float(var)

26
434 / 156 / 28
Регистрация: 12.12.2020
Сообщений: 1,253
22.09.2024, 22:26
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
При этом у вас же явно написано: "(float)expression - вычисляется выражение и только потом его результат приводится к float." Где же вы здесь увидели отличие от float(expression)?
я немного не про это хотел сказать. Я имел ввиду что если вычислять выражение состоящее из int овых переменных то результат выражения будет так же int с отбросом дробных частей. И если потом преобразовать его в float то да, тип будет флоат но дробная часть не появится.
(float)(2*5/3*2)
А если одну из переменных int перевести во float сразу, то и все дальнейшие вычисления будут как с float, то есть компилятор сразу int будет переводить во float и соответсnвенно все вычисления и результаты будут с дробями
(float)2*5/3*2
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13177 / 6813 / 1821
Регистрация: 18.10.2014
Сообщений: 17,237
22.09.2024, 22:51
Цитата Сообщение от Alex1126 Посмотреть сообщение
я немного не про это хотел сказать. Я имел ввиду что если вычислять выражение состоящее из int овых переменных то результат выражения будет так же int с отбросом дробных частей. И если потом преобразовать его в float то да, тип будет флоат но дробная часть не появится.
Совершенно верно. Но это не имеет никакого отношения к двум предложенным вариантам преобразования. И, разумеется, не демонстрирует никакого отличия межу этими вариантами.

Цитата Сообщение от Alex1126 Посмотреть сообщение
А если одну из переменных int перевести во float сразу, то и все дальнейшие вычисления будут как с float, то есть компилятор сразу int будет переводить во float и соответсnвенно все вычисления и результаты будут с дробями
Это тоже верно. Но и это не имеет никакого отношения к двум предложенным вариантам преобразования.

В обоих ваших примерах (float)(2*5/3*2) и (float)2*5/3*2 используется только первый вариант преобразования, т.е. (float) expression. Второй вариант преобразования float(expression) вы нигде не использовали вообще. Поэтому и возникает вопрос: почему вы преподнесли ваши рассуждения в сообщении #16 как "разницу между двумя вариантами преобразования"?
0
 Аватар для volodin661
6793 / 2290 / 348
Регистрация: 10.12.2013
Сообщений: 7,901
22.09.2024, 22:52
Цитата Сообщение от Azathtot Посмотреть сообщение
Не, по собственному опыту - писать на нем реально приятно и быстро. Но через пару недель возникает вопрос : "А что я тут написал"
покажешь ?
0
434 / 156 / 28
Регистрация: 12.12.2020
Сообщений: 1,253
22.09.2024, 23:01
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
В обоих ваших примерах (float)(2*5/3*2) и (float)2*5/3*2 используется только первый вариант преобразования,
но ответы при этом разные

я наверно немного не так выразился. Если писать float (expression) то сначала вычисляется выражение а потом только меняется тип, а если (float)expression то expression "разбивается" на элементы и приведение типов "наступает" до вычисления. Я про это.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13177 / 6813 / 1821
Регистрация: 18.10.2014
Сообщений: 17,237
22.09.2024, 23:56
Цитата Сообщение от Alex1126 Посмотреть сообщение
но ответы при этом разные
И что из этого?

Вы изначально вели речь о разнице между вариантами преобразования (float) expression и float(expression). А в этих примерах в обоих случаях используется один и тот же вариант - первый. Как это ваше "ответы разные" может относиться к "разнице между вариантами преобразования" если вариант преобразования и там и там использован один и тот же? ¯\_(ツ)_/¯

Цитата Сообщение от Alex1126 Посмотреть сообщение
Если писать float (expression) то сначала вычисляется выражение а потом только меняется тип, а если (float)expression то expression "разбивается" на элементы и приведение типов "наступает" до вычисления. Я про это.
Ну тут вы занимаетесь манипуляцией словами. В (float)expression это expression никак не может "разбиваться". Если оно "разбивается", то это значит, что уже изначально не было никакого expression.

Например в записи (float) 1 / 2 нет "выражения" 1 / 2. Синтаксические правила разбора выражений языка С++ говорят, что составными частями здесь являются (float) 1, оператор / и 2. То есть такой части как 1 / 2 здесь нет и никогда не было.

---

Также, в сообщении #16 вы пишете все "с точностью до наоборот". Там вы написали, что именно в "(float)expression - вычисляется выражение и только потом его результат приводится к float". А здесь вы вдруг пишете "Если писать float (expression) то сначала вычисляется выражение а потом только меняется тип". ¯\_(ツ)_/¯
1
 Аватар для volodin661
6793 / 2290 / 348
Регистрация: 10.12.2013
Сообщений: 7,901
25.09.2024, 15:09
Приличным решением являлось бы использование специального оператора для целочисленного деления,
Tрадиционно им является div
Code
1
1 div 2
получаю 0

Code
1
1/2
получаю 0.5

Но приличия - это не про "C"
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
25.09.2024, 16:18
Цитата Сообщение от volodin661 Посмотреть сообщение
1/2
получаю 0.5
А смысл, если мы потом приравниваем к целому, опять срез...
А если используете дробные, то и будет ваши 0,5л.

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

Добавлено через 2 минуты
зызызызы: никто не отменял : div
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.09.2024, 16:18
Помогаю со студенческими работами здесь

Ошибка: недопустимые операнды для двоичного выражения ('float' and 'float')
Здравствуйте! Как исправить эту ошибку? #include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int main() { float...

cannot convert `float' to `float*. Почему так происходит?
всем привет, помогите исправить ошибки... а то голова мало варит уже, а завтра надо сдать уже #include &lt;stdio.h&gt; #include...

invalid types `float[float]' for array subscript
void SEARCH(float vol, float price, int i) { if (i&gt;N) { if(price&gt;maxprice) { ...

Неправильное приведение void* к *float а далее к float
Почему когда привожу void* к int* потом к int то все работает, данные не бьются и работают нормально, когда делаю те же операции но с...

Конвертация IBM float в IEEE float
Добрый день, Мне необходимо конвертировать IBM float в IEEE float. По этой ссылке http://support.sas.com/techsup/technote/ts140.pdf...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru