0 / 0 / 0
Регистрация: 07.11.2019
Сообщений: 9
|
|
1 | |
Зачем нужно приводить к double08.12.2019, 19:43. Показов 2248. Ответов 19
Метки нет (Все метки)
0
|
08.12.2019, 19:43 | |
Ответы с готовыми решениями:
19
Ошибки error C2296: -: недопустимо, левый операнд имеет тип "double (__cdecl *)(double,double,double Ошибка: error LNK2001: unresolved external symbol "double __cdecl Akk(double,double,double)" Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить? Зачем нужно u--? |
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
|
4019 / 2565 / 430
Регистрация: 09.09.2017
Сообщений: 11,442
|
|
18.12.2019, 10:22 | 4 |
Не берусь утверждать наверняка, но вроде бы (double)x это Си-стиль явного приведения, а double(x) - плюсовый. Причем визуально второй вариант похож вообще на конструктор объекта.
1
|
18.12.2019, 10:29 | 5 |
2
|
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
|
|
18.12.2019, 20:27 | 6 |
0
|
Вездепух
12794 / 6671 / 1795
Регистрация: 18.10.2014
Сообщений: 16,890
|
|
18.12.2019, 23:33 | 8 |
Никак. Без точной информации о типе
summa и vsego ваш вопрос полностью бессмыслен.Что такое double() ???Откуда вы знаете, что это int / int?
0
|
19.12.2019, 09:51 | 9 |
Строго говоря, есть ещё и статистика по вопросам от начинающих. Поэтому конкретно в данном случае можно смело ванговать на тему того, что переменные summa и vsego имеют целочисленный тип
0
|
4019 / 2565 / 430
Регистрация: 09.09.2017
Сообщений: 11,442
|
|
19.12.2019, 10:03 | 10 |
А можно зайти и с другой стороны: поскольку приведение не упало с ошибкой, тип данных числовой. А раз оно вообще понадобилось, он был целочисленным.
0
|
Вездепух
12794 / 6671 / 1795
Регистрация: 18.10.2014
Сообщений: 16,890
|
|
19.12.2019, 10:18 | 11 |
Нет, конечно. Приведение запросто может понадобиться и для
float / float .В том то и дело, что можно, но не нужно. Это не вопрос "вангования" на тему того, что хотел спросить начинающий. Это вопрос обучения начинающих умению правильно задавать вопросы. В этом, кстати, содержится 90% ответа.
0
|
19.12.2019, 10:29 | 12 |
Есть такие начинающие, которым действительно интересно программирование. А есть такие, которым просто нужно спихнуть зачёт. По постановке вопроса их можно отличить. Тратить время на обучение начинающих имеет смысл только тогда, когда начинающему это действительно нужно
Другое дело, что независимо от того, что из себя представляет ТС, тему будут читать в том числе и те, кто является начинающим и кто готов тратить время на обучение. Вот здесь с тобой соглашусь - ради этого действительно имеет смысл потратить время
0
|
Вездепух
12794 / 6671 / 1795
Регистрация: 18.10.2014
Сообщений: 16,890
|
|
19.12.2019, 10:35 | 13 |
Да, но предоставлять ответы, ориентированные именно на желающих "спихнуть зачёт" - лишь замусоривать ресурс. Тем более что примерно в 99 случаях из 100 ответы этим желающим уже много раз предоставлялись. Пусть не ленятся и ищут сами.
Именно. В современном интернет-сообществе акцент уже давно сдвинулся с предоставления ответа непосредственному вопрошавшему на обсуждение темы со всеми присутствующими и предоставление ответа тем, кто придет позже. И это правильно.
0
|
4019 / 2565 / 430
Регистрация: 09.09.2017
Сообщений: 11,442
|
|
20.12.2019, 09:59 | 14 |
Разумеется нет. Во-первых, вывод идет все равно с форматом "%f", во-вторых, функции с переменным числом параметров сами приводят типы. Единственный вариант - слабая попытка повысить точность, но и то спохватываться последнем этапе бессмысленно.
0
|
Вездепух
12794 / 6671 / 1795
Регистрация: 18.10.2014
Сообщений: 16,890
|
|
20.12.2019, 10:46 | 15 |
При чем здесь все это вообще?
Именно об этом идет речь. Ничего "слабого" в повышении точности с float до double , разумеется, нет. Это громадное повышение точности.Смешно. Это примерно то же самое, как на популярный вопрос начинающих о том, почему 1/2 дает 0 , ответить "Чувак, можно, конечно, выполнить плавающее деление, но спохватываться на последнем этапе бессмысленно. 0 значит 0 . Привыкай."
0
|
4019 / 2565 / 430
Регистрация: 09.09.2017
Сообщений: 11,442
|
|
20.12.2019, 12:28 | 16 |
При том, что конвертация float->double при передаче в printf происходит автоматически, без явного указания.
Громадным оно было бы если бы все расчеты изначально велись в double. А так говорить о повышении точности просто смешно. О, мастер кривых аналогий в действии! Давай, чем еще повеселишь?
0
|
TheCalligrapher
|
20.12.2019, 19:21
#17
|
0
|
4019 / 2565 / 430
Регистрация: 09.09.2017
Сообщений: 11,442
|
|
21.12.2019, 11:12 | 18 |
Не вижу смысла особо комментировать высказывания человека, который не видит разницы int->float и float->double. Тем более в операции деления, где потери точности дробных чисел минимальны.
А, так ты просто не понял простейшую цепочку рассуждений. Хорошо, объясню. В 14 посте было сделано два предположения зачем можно пытаться привести float к double при передаче функции printf: явно указать выводимый тип (независимо от реальной точности), либо повысить точность при операции деления. Опровергаем первый вариант: при передаче дробных чисел в функцию с переменным числом аргументов происходит неявное преобразование до double. Опровергаем второй вариант: операции умножения и деления для дробных чисел гораздо меньше влияют на точность, чем операции сложения*. Мало того, при выводе редко учитывается больше 2-4 значащих цифр. На практике это просто не нужно. Так что TheCalligrapher, хватит уже портить воздух и спорить на пустом месте, тем более когда и спор-то не нужен: твои высказывания никто не оспаривал, пока ты сам не полез позориться. Ну тут уж кто еще тебе виноват. -- *) Для новичков (TheCalligrapher'у -то это не поможет, он целые числа от дробных не отличает): дробные числа в памяти машины хранятся в формате m+2e. Для операций сложения (в т.ч. вычитания) двух чисел приходится приводить их степени к одному значению, то есть сдвигать значащие цифры вправо. Те биты, которые были младшими, приходится отбросить. По этой причине сложение дробных чисел приводит к значительному снижению точности. А вот при умножении и делении это не требуется: степени просто складываются или вычитаются отдельно от значащих цифр. С целыми числами ситуация другая. В них хранятся только значащие цифры, никакие степеней. Соответственно, сложение и вычитание выполняются без всяких сдвигов, то есть без потери точности (если не допускать переполнения, конечно). Умножение целого на целое тоже обходится без потери точности. А вот с делением хуже, причем просто потому что числа целые и хранить дробную часть не умеют.
0
|
2489 / 1147 / 707
Регистрация: 25.04.2016
Сообщений: 3,293
|
||||||
21.12.2019, 14:40 | 19 | |||||
Nik_121, и правда, зачем?
AndryS1, в си нет перегрузок функций. Да и формат %f ожидает float, а не double.
0
|
Вездепух
12794 / 6671 / 1795
Регистрация: 18.10.2014
Сообщений: 16,890
|
|
22.12.2019, 07:11 | 20 |
В функции
printf форматы %f и %lf эквивалентны и оба ожидают double . Функция printf не может ожидать float потому, что значения типа float невозможно передать через variadic параметры. Использовать %f для float аргументов, а %lf для double аргументов - хороший тон, но это не обязательно.
0
|
22.12.2019, 07:11 | |
22.12.2019, 07:11 | |
Помогаю со студенческими работами здесь
20
Зачем в методе простой итерации (линейные системы) приводить к диагональному преобладанию ? Зачем в .NET в 2014 г. строгая типизация? Зачем нужно писать Convert.ToInt32(), ToString(), Int32.Parse()? Ругается на строчку double[] wArray = new double[n];, double[] w = new double[n]; Зачем нужно ООП? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |