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

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

20.09.2024, 07:57. Показов 2471. Ответов 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
451 / 176 / 29
Регистрация: 12.12.2020
Сообщений: 1,367
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
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
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
7094 / 2325 / 353
Регистрация: 10.12.2013
Сообщений: 8,020
22.09.2024, 22:52
Цитата Сообщение от Azathtot Посмотреть сообщение
Не, по собственному опыту - писать на нем реально приятно и быстро. Но через пару недель возникает вопрос : "А что я тут написал"
покажешь ?
0
451 / 176 / 29
Регистрация: 12.12.2020
Сообщений: 1,367
22.09.2024, 23:01
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
В обоих ваших примерах (float)(2*5/3*2) и (float)2*5/3*2 используется только первый вариант преобразования,
но ответы при этом разные

я наверно немного не так выразился. Если писать float (expression) то сначала вычисляется выражение а потом только меняется тип, а если (float)expression то expression "разбивается" на элементы и приведение типов "наступает" до вычисления. Я про это.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
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
7094 / 2325 / 353
Регистрация: 10.12.2013
Сообщений: 8,020
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
Ответ Создать тему
Новые блоги и статьи
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru