0 / 0 / 0
Регистрация: 07.11.2019
Сообщений: 9
1

Зачем нужно приводить к double

08.12.2019, 19:43. Показов 2251. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C
1
printf("%f",(double)summa/vsego);
Как объяснить double в этом случае?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.12.2019, 19:43
Ответы с готовыми решениями:

Ошибки error C2296: -: недопустимо, левый операнд имеет тип "double (__cdecl *)(double,double,double
Думаю из-за polp #include<iostream> #include<cmath> #include<cstdlib> using namespace std;...

Ошибка: error LNK2001: unresolved external symbol "double __cdecl Akk(double,double,double)"
#include <iostream> #include <cmath> using namespace std; double Akk(double x, double y, double...

Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить?
Вот еще один вопрос зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это...

Зачем нужно u--?
Как я понимаю это счетчик итераций !! но зачем он ?? #include <iostream> #include <stdio.h>...

19
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
08.12.2019, 19:57 2
Это тоже самое что и double()
Оно трансформировало выражение int / int в double / int
Благодаря перегрузке функций выражение int / int вернуло бы целое, без остатка
Но double / int вернёт дробное значение
(double)summa / vsego - устаревший вид
Чаще можно увидеть
double(summa) / vsego
1
0 / 0 / 0
Регистрация: 07.11.2019
Сообщений: 9
17.12.2019, 15:57  [ТС] 3
Спасибо!
0
4023 / 2569 / 430
Регистрация: 09.09.2017
Сообщений: 11,483
18.12.2019, 10:22 4
Цитата Сообщение от AndryS1 Посмотреть сообщение
(double)summa / vsego - устаревший вид
Чаще можно увидеть
double(summa) / vsego
Не берусь утверждать наверняка, но вроде бы (double)x это Си-стиль явного приведения, а double(x) - плюсовый. Причем визуально второй вариант похож вообще на конструктор объекта.
1
Evg
Эксперт CАвтор FAQ
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
18.12.2019, 10:29 5
Цитата Сообщение от Nik_121 Посмотреть сообщение
Как объяснить double в этом случае?
Распространенные ошибки

Цитата Сообщение от AndryS1 Посмотреть сообщение
Чаще можно увидеть
double(summa) / vsego
В Си++ - да. В Си - нет
2
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
18.12.2019, 20:27 6
Цитата Сообщение от Evg Посмотреть сообщение
В Си++ - да. В Си - нет
А что Си++ используют не чаще чем Си?)
0
Evg
Эксперт CАвтор FAQ
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
18.12.2019, 23:01 7
Цитата Сообщение от AndryS1 Посмотреть сообщение
А что Си++ используют не чаще чем Си?)
Раздел, в котором размещена данная тема, называется "Си", а не "Си++"
0
Вездепух
Эксперт CЭксперт С++
12807 / 6680 / 1799
Регистрация: 18.10.2014
Сообщений: 16,917
18.12.2019, 23:33 8
Цитата Сообщение от Nik_121 Посмотреть сообщение
Как объяснить double в этом случае?
Никак. Без точной информации о типе summa и vsego ваш вопрос полностью бессмыслен.

Цитата Сообщение от AndryS1 Посмотреть сообщение
Это тоже самое что и double()
Что такое double()???

Цитата Сообщение от AndryS1 Посмотреть сообщение
Оно трансформировало выражение int / int
Откуда вы знаете, что это int / int?
0
Evg
Эксперт CАвтор FAQ
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
19.12.2019, 09:51 9
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Без точной информации о типе summa и vsego ваш вопрос полностью бессмыслен
Строго говоря, есть ещё и статистика по вопросам от начинающих. Поэтому конкретно в данном случае можно смело ванговать на тему того, что переменные summa и vsego имеют целочисленный тип
0
4023 / 2569 / 430
Регистрация: 09.09.2017
Сообщений: 11,483
19.12.2019, 10:03 10
А можно зайти и с другой стороны: поскольку приведение не упало с ошибкой, тип данных числовой. А раз оно вообще понадобилось, он был целочисленным.
0
Вездепух
Эксперт CЭксперт С++
12807 / 6680 / 1799
Регистрация: 18.10.2014
Сообщений: 16,917
19.12.2019, 10:18 11
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
А раз оно вообще понадобилось, он был целочисленным.
Нет, конечно. Приведение запросто может понадобиться и для float / float.

Цитата Сообщение от Evg Посмотреть сообщение
Строго говоря, есть ещё и статистика по вопросам от начинающих. Поэтому конкретно в данном случае можно смело ванговать...
В том то и дело, что можно, но не нужно. Это не вопрос "вангования" на тему того, что хотел спросить начинающий. Это вопрос обучения начинающих умению правильно задавать вопросы. В этом, кстати, содержится 90% ответа.
0
Evg
Эксперт CАвтор FAQ
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
19.12.2019, 10:29 12
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Это вопрос обучения начинающих умению правильно задавать вопросы. В этом, кстати, содержится 90% ответа
Есть такие начинающие, которым действительно интересно программирование. А есть такие, которым просто нужно спихнуть зачёт. По постановке вопроса их можно отличить. Тратить время на обучение начинающих имеет смысл только тогда, когда начинающему это действительно нужно

Другое дело, что независимо от того, что из себя представляет ТС, тему будут читать в том числе и те, кто является начинающим и кто готов тратить время на обучение. Вот здесь с тобой соглашусь - ради этого действительно имеет смысл потратить время
0
Вездепух
Эксперт CЭксперт С++
12807 / 6680 / 1799
Регистрация: 18.10.2014
Сообщений: 16,917
19.12.2019, 10:35 13
Цитата Сообщение от Evg Посмотреть сообщение
Есть такие начинающие, которым действительно интересно программирование. А есть такие, которым просто нужно спихнуть зачёт. По постановке вопроса их можно отличить.
Да, но предоставлять ответы, ориентированные именно на желающих "спихнуть зачёт" - лишь замусоривать ресурс. Тем более что примерно в 99 случаях из 100 ответы этим желающим уже много раз предоставлялись. Пусть не ленятся и ищут сами.

Цитата Сообщение от Evg Посмотреть сообщение
Другое дело, что независимо от того, что из себя представляет ТС, тему будут читать в том числе и те, кто является начинающим и кто готов тратить время на обучение. Вот здесь с тобой соглашусь - ради этого действительно имеет смысл потратить время
Именно. В современном интернет-сообществе акцент уже давно сдвинулся с предоставления ответа непосредственному вопрошавшему на обсуждение темы со всеми присутствующими и предоставление ответа тем, кто придет позже. И это правильно.
0
4023 / 2569 / 430
Регистрация: 09.09.2017
Сообщений: 11,483
20.12.2019, 09:59 14
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Приведение запросто может понадобиться и для float / float.
Разумеется нет. Во-первых, вывод идет все равно с форматом "%f", во-вторых, функции с переменным числом параметров сами приводят типы. Единственный вариант - слабая попытка повысить точность, но и то спохватываться последнем этапе бессмысленно.
0
Вездепух
Эксперт CЭксперт С++
12807 / 6680 / 1799
Регистрация: 18.10.2014
Сообщений: 16,917
20.12.2019, 10:46 15
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Разумеется нет. Во-первых, вывод идет все равно с форматом "%f", во-вторых, функции с переменным числом параметров сами приводят типы.
При чем здесь все это вообще?

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Единственный вариант - слабая попытка повысить точность
Именно об этом идет речь. Ничего "слабого" в повышении точности с float до double, разумеется, нет. Это громадное повышение точности.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
но и то спохватываться последнем этапе бессмысленно.
Смешно.

Это примерно то же самое, как на популярный вопрос начинающих о том, почему 1/2 дает 0, ответить "Чувак, можно, конечно, выполнить плавающее деление, но спохватываться на последнем этапе бессмысленно. 0 значит 0. Привыкай."
0
4023 / 2569 / 430
Регистрация: 09.09.2017
Сообщений: 11,483
20.12.2019, 12:28 16
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
При чем здесь все это вообще?
При том, что конвертация float->double при передаче в printf происходит автоматически, без явного указания.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Именно об этом идет речь. Ничего "слабого" в повышении точности с float до double, разумеется, нет. Это громадное повышение точности.
Громадным оно было бы если бы все расчеты изначально велись в double. А так говорить о повышении точности просто смешно.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Это примерно то же самое, как на популярный вопрос начинающих о том, почему 1/2 дает 0, ответить "Чувак, можно, конечно, выполнить плавающее деление, но спохватываться на последнем этапе бессмысленно. 0 значит 0. Привыкай."
О, мастер кривых аналогий в действии! Давай, чем еще повеселишь?
0
TheCalligrapher
20.12.2019, 19:21
  #17

Не по теме:

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
При том, что конвертация float->double при передаче в printf происходит автоматически, без явного указания.
Хм... А сумма углов треугольника - 180 градусов. Просто удивленно переглянемся и покачаем головами...

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Громадным оно было бы если бы все расчеты изначально велись в double. А так говорить о повышении точности просто смешно.[...]О, мастер кривых аналогий в действии! Давай, чем еще повеселишь?
Я вижу, что "кривая аналогия" звонко попала в самую точку. Это называется "когда понял, что сел в лужу, и нечем крыть" :)

0
4023 / 2569 / 430
Регистрация: 09.09.2017
Сообщений: 11,483
21.12.2019, 11:12 18
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Я вижу, что "кривая аналогия" звонко попала в самую точку. Это называется "когда понял, что сел в лужу, и нечем крыть"
Не вижу смысла особо комментировать высказывания человека, который не видит разницы int->float и float->double. Тем более в операции деления, где потери точности дробных чисел минимальны.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Хм... А сумма углов треугольника - 180 градусов.
А, так ты просто не понял простейшую цепочку рассуждений. Хорошо, объясню.
В 14 посте было сделано два предположения зачем можно пытаться привести float к double при передаче функции printf: явно указать выводимый тип (независимо от реальной точности), либо повысить точность при операции деления.
Опровергаем первый вариант: при передаче дробных чисел в функцию с переменным числом аргументов происходит неявное преобразование до double.
Опровергаем второй вариант: операции умножения и деления для дробных чисел гораздо меньше влияют на точность, чем операции сложения*. Мало того, при выводе редко учитывается больше 2-4 значащих цифр. На практике это просто не нужно.
Так что TheCalligrapher, хватит уже портить воздух и спорить на пустом месте, тем более когда и спор-то не нужен: твои высказывания никто не оспаривал, пока ты сам не полез позориться. Ну тут уж кто еще тебе виноват.
--
*) Для новичков (TheCalligrapher'у -то это не поможет, он целые числа от дробных не отличает): дробные числа в памяти машины хранятся в формате m+2e. Для операций сложения (в т.ч. вычитания) двух чисел приходится приводить их степени к одному значению, то есть сдвигать значащие цифры вправо. Те биты, которые были младшими, приходится отбросить. По этой причине сложение дробных чисел приводит к значительному снижению точности. А вот при умножении и делении это не требуется: степени просто складываются или вычитаются отдельно от значащих цифр.
С целыми числами ситуация другая. В них хранятся только значащие цифры, никакие степеней. Соответственно, сложение и вычитание выполняются без всяких сдвигов, то есть без потери точности (если не допускать переполнения, конечно). Умножение целого на целое тоже обходится без потери точности. А вот с делением хуже, причем просто потому что числа целые и хранить дробную часть не умеют.
0
2489 / 1147 / 707
Регистрация: 25.04.2016
Сообщений: 3,294
21.12.2019, 14:40 19
Nik_121, и правда, зачем?
C
1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
int main (void) {
    int summa = 5;
    int vsego = 2;
    printf("avg = %lf\n", summa/vsego);
    printf("avg = %lf\n", (double)summa/vsego);
    return 0;
}
Добавлено через 1 минуту
AndryS1, в си нет перегрузок функций. Да и формат %f ожидает float, а не double.
0
Вездепух
Эксперт CЭксперт С++
12807 / 6680 / 1799
Регистрация: 18.10.2014
Сообщений: 16,917
22.12.2019, 07:11 20
Цитата Сообщение от stake-k26 Посмотреть сообщение
Да и формат %f ожидает float, а не double.
В функции printf форматы %f и %lf эквивалентны и оба ожидают double. Функция printf не может ожидать float потому, что значения типа float невозможно передать через variadic параметры.

Использовать %f для float аргументов, а %lf для double аргументов - хороший тон, но это не обязательно.
0
22.12.2019, 07:11
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.12.2019, 07:11
Помогаю со студенческими работами здесь

Зачем в методе простой итерации (линейные системы) приводить к диагональному преобладанию ?
метод простой итерации решения систем линейных уравнений. зачем приводить к диагональному...

Зачем в .NET в 2014 г. строгая типизация? Зачем нужно писать Convert.ToInt32(), ToString(), Int32.Parse()?
По поводу преобразования. Современный препроцессор кода сам определяет, что куда преобразовывать....

Ругается на строчку double[] wArray = new double[n];, double[] w = new double[n];
Ругается на строчку double wArray = new double;, double w = new double; Не удаётся преобразовать...

Зачем нужно ООП?
В общем, столкнулся с такой проблемой (пока только постигаю азы программирования в с++), я не...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Какой язык программировани­я лучший для разработки нейронных сетей
InfoMaster 20.01.2025
В современном мире технологий искусственные нейронные сети становятся неотъемлемой частью множества инновационных решений, от распознавания речи до автоматического управления транспортными. . .
Как подключить JavaScript файл в другом JavaScript файле
InfoMaster 20.01.2025
В современной веб-разработке организация кодовой базы играет ключевую роль в создании масштабируемых и поддерживаемых приложений. Модульность и правильное структурирование кода стали неотъемлемыми. . .
Как откатить изменения в исходниках, не внесенные в Git
InfoMaster 20.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с необходимостью отменить внесенные изменения в исходном коде. Особенно актуальной становится ситуация, когда изменения еще. . .
В чем разница между px, in, mm, pt, dip, dp, sp
InfoMaster 20.01.2025
В мире цифрового дизайна и разработки интерфейсов правильный выбор единиц измерения играет ключевую роль в создании качественного пользовательского опыта. История развития систем измерений для. . .
Как изменить адрес удалённого репозитория (origin) в Git
InfoMaster 20.01.2025
В терминологии Git термин origin является стандартным именем для основного удаленного репозитория, с которым взаимодействует локальная копия проекта. Когда разработчик клонирует репозиторий с. . .
Как переместить последние коммиты в новую ветку (branch) в Git
InfoMaster 20.01.2025
При работе над проектом часто возникают ситуации, когда необходимо изолировать определенные изменения от основной линии разработки. Это может быть связано с экспериментальными функциями, исправлением. . .
Как вернуть результат из асинхронной функции в JavaScript
InfoMaster 20.01.2025
Асинхронное программирование представляет собой фундаментальную концепцию в JavaScript, которая позволяет выполнять длительные операции без блокировки основного потока выполнения программы. В. . .
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций История планшетов началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые прототипы,. . .
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru