в чем разница между double и double в
Какая разница между типами double и Double
Ребята попытайтесь объяснить или дайте ссыль а то как то найти не получаеться!
какая разница между этими типами переменных?
Объясните, пожалуйста в чем разница между типами-значениями и ссылочными типами?
В чем разница между типами-значениями и ссылочными типами. Привести пример типов-значений и.
Перегрузите метод f так, чтобы соответствовала виду static void f (double x, out double y)
ПОМОГИТЕ!! Выдаёт ошибку! До передачи управления из текущего метода выходному параметру «y» должно.
Делегат Func, bool, double, double>
Задание: реализуйте пользовательский тип делегата требуемой сигнатуры и выполните с его.
Перегрузите метод f так, чтобы его сигнатура соответствовала виду static void f (double x, out double y)
Как сделать метод, чтобы он соответствовал заданию? class Program < static double.
Ошибка: Cannot implicitly convert type `double[]’ to `double*’
Как привально написать строку: double*p3 = new double ; Ошибка: Cannot implicitly convert.
Перегрузите метод f из предыдущего раздела так, чтобы его сигнатура (заголовок) соответствовала виду static void f (double x, out double y)
форумчане помогите пожалуйста с решением задач. есть примеры, я недавно изучаю с# поэтому не.
Одинарная или двойная точность?
Введение
Статья также написана для тех из вас, у кого много данных. Если вам требуется несколько чисел тут или там, просто используйте double и не забивайте себе голову!
Точность данных
У 32-битных чисел с плавающей запятой точность примерно 24 бита, то есть около 7 десятичных знаков, а у чисел с двойной точностью — 53 бита, то есть примерно 16 десятичных знаков. Насколько это много? Вот некоторые грубые оценки того, какую точность вы получаете в худшем случае при использовании float и double для измерения объектов в разных диапазонах:
Почему всегда не хранить всё с двойной точностью?
Влияние на производительность вычислений с одинарной и двойной точностью
Когда производить вычисления с увеличенной точностью
Даже если вы храните данные с одинарной точностью, в некоторых случаях уместно использовать двойную точность при вычислениях. Вот простой пример на С:
Если вы запустите этот код на десяти числах одинарной точности, то не заметите каких-либо проблем с точностью. Но если запустите на миллионе чисел, то определённо заметите. Причина в том, что точность теряется при сложении больших и маленьких чисел, а после сложения миллиона чисел, вероятно, такая ситуация встретится. Практическое правило такое: если вы складываете 10^N значений, то теряете N десятичных знаков точности. Так что при сложении тысячи (10^3) чисел теряются три десятичных знака точности. Если складывать миллион (10^6) чисел, то теряются шесть десятичных знаков (а у float их всего семь!). Решение простое: вместо этого выполнять вычисления в формате double :
Пример
Предположим, что вы хотите точно измерить какое-то значение, но ваше измерительное устройство (с неким цифровым дисплеем) показывает только три значимых разряда. Измерение переменной десять раз выдаёт следующий ряд значений:
Чтобы увеличить точность, вы решаете сложить результаты измерений и вычислить среднее значение. В этом примере используется число с плавающей запятой в base-10, у которого точность составляет точно семь десятичных знаков (похоже на 32-битный float ). С тремя значимыми разрядами это даёт нам четыре дополнительных десятичных знака точности:
В сумме уже четыре значимых разряда, с тремя свободными. Что если сложить сотню таких значений? Тогда мы получим нечто вроде такого:
Всё ещё остались два неиспользованных разряда. Если суммировать тысячу чисел?
Пока что всё хорошо, но теперь мы используем все десятичные знаки для точности. Продолжим складывать числа:
Заметьте, как мы сдвигаем меньшее число, чтобы выровнять десятичный разделитель. У нас больше нет запасных разрядов, и мы опасно приблизились к потере точности. Что если сложить сто тысяч значений? Тогда добавление новых значений будет выглядеть так:
Обратите внимание, что последний значимый разряд данных (2 в 3.12) теряется. Вот теперь потеря точности действительно происходит, поскольку мы непрерывно будем игнорировать последний разряд точности наших данных. Мы видим, что проблема возникает после сложения десяти тысяч чисел, но до ста тысяч. У нас есть семь десятичных знаков точности, а в измерениях имеются три значимых разряда. Оставшиеся четыре разряда — это четыре порядка величины, которые выполняют роль своеобразного «числового буфера». Поэтому мы можем безопасно складывать четыре порядка величины = 10000 значений без потери точности, но дальше возникнут проблемы. Поэтому правило следующее:
(Существуют численно стабильные способы сложения большого количества значений. Однако простое переключение с float на double гораздо проще и, вероятно, быстрее).
Выводы
Приложение: Что такое число с плавающей запятой?
Я обнаружил, что многие на самом деле не вникают, что такое числа с плавающей запятой, поэтому есть смысл вкратце объяснить. Я пропущу здесь мельчайшие детали о битах, INF, NaN и поднормалях, а вместо этого покажу несколько примеров чисел с плавающей запятой в base-10. Всё то же самое применимо к двоичным числам.
Вот несколько примеров чисел с плавающей запятой, все с семью десятичными разрядами (это близко к 32-битному float ).
1.875545 · 10^-18 = 0.000 000 000 000 000 001 875 545
3.141593 · 10^0 = 3.141593
2.997925 · 10^8 = 299 792 500
6.022141 · 10^23 = 602 214 100 000 000 000 000 000
Выделенная жирным часть называется мантиссой, а выделенная курсивом — экспонентой. Вкратце, точность хранится в мантиссе, а величина в экспоненте. Так как с ними работать? Ну, умножение производится просто: перемножаем мантисссы и складываем экспоненты:
Сложение немного хитрее: чтобы сложить два числа разной величины, сначала нужно сдвинуть меньшее из двух чисел таким образом, чтобы запятая находилась в одном и том же месте.
Заметьте, как мы сдвинули некоторые из значимых десятичных знаков, чтобы запятые совпадали. Другими словами, мы теряем точность, когда складываем числа разных величин.
Разница между double. и double [] в объявлении формального параметра
У меня вопрос: в чем разница между этими двумя объявлениями?
ОТВЕТЫ
Ответ 1
В varargs
Конструкция Type. в объявлении параметра метода обычно называется varargs. В JLS он называется параметром переменной arity.
JLS 8.4.1 Параметры формата
Последний формальный параметр в списке является особым; он может быть переменным параметром arity, обозначенным elipsis, следующим за типом.
Чтобы проиллюстрировать код, это то, что позволяет сделать varargs:
Напротив, без конструкции varargs вы должны сделать это:
См. также
Varargs gotchas
Как решены varargs, это довольно сложно, и иногда это делает вещи, которые могут вас удивить.
Рассмотрим следующий пример:
Связанные вопросы
Ниже приведен пример некоторых вопросов, которые люди задавали при работе с varargs:
Вкл., когда использовать varargs
Как показал предыдущий раздел, varargs может быть сложным. Однако в правильных ситуациях они могут привести к гораздо более сжатому коду.
Здесь цитата из Effective Java 2nd Edition, пункт 42: разумно использовать varargs (выделение автором):
Урок ясен. Не модифицируйте каждый метод с окончательным параметром массива; используйте varargs только тогда, когда вызов действительно работает с последовательностью значений переменной длины.
Мало того, что varargs путают, это также может быть дорогостоящим. Эффективная Java 2nd Edition на самом деле рекомендует предоставлять перегрузки с фиксированной архитектурой для наиболее распространенных сценариев использования.
Предположим, вы определили, что 95 процентов вызовов метода имеют три или меньше параметров. Затем объявите пять перегрузок метода, по одному для каждого с нулем через три обычных параметра, и один varargs для использования, когда число параметров превышает три.
Книга идет гораздо глубже, но по существу вам следует использовать varargs, когда это действительно имеет смысл. И даже в этих случаях вы все равно можете рассмотреть возможность предоставления перегрузок с фиксированной архитектурой по соображениям производительности.
Связанный с этим вопрос
Ссылки API
Вот несколько примеров, где varargs имеет смысл:
В объявлениях массивов
Пожалуйста, не делайте привычки объявлять массивы следующим образом:
Вместо этого вы должны скопировать скобки с типом, а не с идентификатором:
Обратите внимание, что это также то, как массивы упоминаются в приведенных выше обсуждениях, например. T[] int[] и т.д.
Связанные вопросы
Ответ 2
Основное отличие состоит в том, что в первом случае вы можете вызвать printMax с несколькими аргументами:
тогда как во втором случае он принимает только один аргумент (массив double ).
Внутри тела метода числа будут доступны как массив в обоих случаях.
Ответ 3
В методе может быть только один параметр vararg, и по очевидным причинам он должен быть последним в своем прототипе. Однако он будет доступен в методе как массив, поэтому в этом конкретном случае разница невелика.
Когда кто-нибудь воспользуется одним из них?
ОТВЕТЫ
Ответ 1
Двоичный номер и местоположение двоичной точки кодируются в пределах значения.
Что касается того, что использовать, когда:
Для значений, которые являются более артефактами природы, которые в действительности не могут быть точно измерены, float / double более подходят. Например, научные данные обычно представляются в этой форме. Здесь исходные значения не будут «децимально точными» для начала, поэтому для ожидаемых результатов не важно поддерживать «десятичную точность». Плавающие двоичные точечные типы намного быстрее работают, чем десятичные.
Ответ 2
Десятичные дроби имеют гораздо более высокую точность и обычно используются в финансовых приложениях, которые требуют высокой степени точности. Десятичные дроби намного медленнее (в некоторых тестах до 20 раз), чем double/float.
Десятичные числа и числа с плавающей запятой/удвоения нельзя сравнивать без приведения, тогда как числа с числами с плавающей запятой и числами с удвоением Десятичные дроби также допускают кодирование или конечные нули.
Ответ 3
Десятичная структура строго ориентирована на финансовые расчеты, требующие точности, которые относительно нетерпимы к округлению. Десятичные числа не подходят для научных приложений, однако по нескольким причинам:
Ответ 4
Ответ 5
float 7 цифр точности
double имеет около 15 цифр точности
decimal имеет около 28 цифр точности
Ответ 6
Я не буду повторять тонны хорошей (и некорректной) информации, на которую уже ответил ответ в других ответах и комментариях, но я отвечу на ваш последующий вопрос с подсказкой:
Когда кто-нибудь воспользуется одним из них?
Используйте десятичное значение для подсчитанных значений
Использовать float/double для значений измеренных
деньги (мы считаем деньги или измеряем деньги?)
расстояние (рассчитываем расстояние или измеряем расстояние?)
(мы подсчитываем баллы или оцениваем баллы?)
Мы всегда считаем деньги и никогда не должны их измерять. Обычно мы измеряем расстояние. Мы часто подсчитываем баллы.
* В некоторых случаях, что я бы назвал номинальным расстоянием, мы можем действительно хотеть «подсчитать» расстояние. Например, возможно, мы имеем дело со знаками страны, которые показывают расстояния до городов, и мы знаем, что эти расстояния никогда не имеют более одной десятичной цифры (xxx.x км).
Ответ 7
Никто не упомянул, что
В настройках по умолчанию Floats (System.Single) и double (System.Double) никогда не будут использовать проверка переполнения, в то время как Decimal (System.Decimal) всегда будет использовать проверка переполнения.
throws OverflowException.
Ответ 8
Ответ 9
( float подходит для «плавающей запятой» и просто означает число с точкой что-то в конце.)
Дважды щелкните по новой кнопке, чтобы получить код. Добавьте в код кнопки следующие три строки:
Остановите свою программу и вернитесь в окно кодирования. Измените эту строку:
Ответ 10
Основное различие заключается в том, что Float и Doubles представляют собой двоичные типы с плавающей запятой, а Decimal будет хранить значение в виде типа с плавающей запятой. Таким образом, Decimals имеют гораздо более высокую точность и обычно используются в денежных (финансовых) или научных приложениях расчета, которые требуют высокой степени точности. Но в производительности разумные Десятичные разряды медленнее, чем двойные и плавающие типы.
Decimal может 100% точно представлять любое число в пределах точности десятичного формата, тогда как Float и Double, не могут точно представлять все числа, даже числа, которые находятся в пределах их соответствующих форматов.
Decimal
В случае финансовых приложений или научных расчетов лучше использовать десятичные типы, потому что это дает вам высокий уровень точности и легко избежать ошибок округления.
Double
Двойные типы, вероятно, являются наиболее обычно используемым типом данных для реальных значений, за исключением обработки денег.
Float
Он используется в основном в графических библиотеках, потому что очень высокие требования к мощности обработки, а также используются ситуации, которые могут выдержать ошибки округления.
Ответ 11
Теперь, почти для всех наших значений Excel, это сработало красиво. Но для некоторых очень маленьких значений Excel, используя decimal.TryParse потерял значение. Одним из таких примеров является
cellValue = 0,00006317592
Decimal.TryParse(cellValue.ToString(), значение out); // вернет 0
Странно. Очень странно.
Ответ 12
Ответ 13
Ответ 14
Ответ 15
Проблема со всеми этими типами заключается в том, что существует некоторая неточность И эта проблема может возникать с небольшими десятичными числами, как в следующем примере
Вопрос: Какое значение содержит переменная bLower?
Ответ: На 32-битной машине bLower содержит TRUE.
Если я заменил Double на Decimal, bLower содержит FALSE, что является хорошим ответом.
В двойном случае проблема заключается в том, что fMean-fDelta = 1.09999999999, что ниже 1.1.
Предостережение: я думаю, что такая же проблема может существовать и для другого числа, потому что Decimal является только двойным с более высокой точностью, и точность всегда имеет предел.
Фактически, Double, Float и Decimal соответствуют BINARY десятичному значению в COBOL!
Ответ 16
Ответ 17
Ответ 18
Вы также можете проверить документацию здесь:
Разница между long double и double в C и переполнением стека
Я новичок в программировании, и я не могу понять разницу между long double и double в C и C ++. Я попытался Google это, но не смог понять это и запутался. Может кто-нибудь, пожалуйста, помогите.?
Решение
Чтобы процитировать стандарт C ++, §3.9.1 ¶8:
Существует три типа с плавающей точкой: float, double и long double. Тип double обеспечивает, по крайней мере, такую же точность, как и float, а тип long double обеспечивает, по крайней мере, такую же точность, что и double. Набор значений типа float является подмножеством набора значений типа double; набор значений типа double является подмножеством набора значений типа long double. Представление значений типов с плавающей запятой определяется реализацией. Интегральные и плавающие типы вместе называются арифметическими типами. Специализации стандартного шаблона std :: numeric_limits (18.3) должны определять максимальное и минимальное значения каждого арифметического типа для реализации.
В системах x86 float обычно имеет длину 4 байта и может хранить числа размером около 3 × 10³⁸ и около 1.4 × 10⁻⁴⁵. Это IEEE 754 число с одинарной точностью который хранит около 7 десятичных цифр дробного числа.
Вместо этого некоторые компиляторы поддерживают 16-битный (128-битный) IEEE 754 числовой формат четверной точности с еще более точными представлениями и большим диапазоном.
Другие решения
Это зависит от вашего компилятора, но следующий код может показать вам количество байтов, которое требуется каждому типу:
long тип данных может держать большие значения, чем тип данных в зависимости от компилятора.