Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.94/35: Рейтинг темы: голосов - 35, средняя оценка - 4.94
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408

Быстродействие double, decimal в x64

19.01.2016, 11:48. Показов 9894. Ответов 106

Студворк — интернет-сервис помощи студентам
Работаю с финансовыми данными, максимальное количество знаков после запятой - 4.
Получаю данные по DDE в формате object[][]. Тип объекта может быть string или double.

Возникли следующие вопросы:
1. Арифметика double крутиться в регистрах процессора на x64, коли double 8 бит?
2. Раз уж приложение работает с финансами, и, вроде как, желательно использовать decimal,
могу ли я без значительных издержек (погрешность допускается) обойтись double в угоду быстродействия?
3. Если все-таки, захочу работать с double, применение Math.Round не отнимет полученного выигрыша в производительности?
4. Как правильно задать конфигурацию решения x64?
5. Как из object, тип которого заранее известен (double), быстрее получить значение? Распаковка (double)obj?
6. Допустим, имеется класс, с полем double и в DGV отображается BindingList<SomeClass>,
как заставить отображаться этот double с определенным количеством цифр после зпт? (вопрос не особо важен).

7. Какие есть способы быстро работать с decimal и конвертировать из double в decimal?
8. Ну, а так же интересуют комментарии в целом, по поводу быстродействия в данных условиях.

Добавлено через 16 часов 54 минуты
Сокращаю перечень вопросов до 1, 4, 8
С миру по нитке хоть собрать бы. Есть мнения хотя бы?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.01.2016, 11:48
Ответы с готовыми решениями:

Быстродействие одинаковых программ x86 или x64
Добрый день! Если не брать ограничение в используемой оперативной памяти для x86, кто-нибудь замерял реальную разницу в...

Какой тип использовать для денежных коэффициентов (например процент скидки)? Decimal или Double?
Добрый день, возник вопрос, какой тип данных следует использовать для коэффициентов, связанных с денежными расчётами? Сами деньги,...

Чем отличается decimal от double?
Double это все числа с плавающей точкой, тоесть у decimal тоже есть плавающая точка, а значит decimal тоже double. Чтото тут не так...?

106
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
20.01.2016, 12:49
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Psilon Посмотреть сообщение
Или почему нужно сначала класть результат вычислений в локальную переменную, а только потом её возвращать
а можно поподробнее или ссылку на объяснение?
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
20.01.2016, 14:20
Цитата Сообщение от Woldemar89 Посмотреть сообщение
И вообще, в голову пришла мысля, если уж оптимизировать, - то писать в Native.
В общем случае (потенциально) нативный код работает медленнее (из-за отсутствия оптимизации под конкретный процессор).
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
20.01.2016, 14:42  [ТС]
Цитата Сообщение от Shamil1 Посмотреть сообщение
Нет.
В моем случае, скорее, да, как запилю - узнаю.
Цитата Сообщение от Shamil1 Посмотреть сообщение
В общем случае (потенциально) нативный код работает медленнее (из-за отсутствия оптимизации под конкретный процессор).
Скорее, по другому, - в общем случае, - быстрее. А в каких-то - медленней.
Вообще - большинство тестов и прочего - сплошная синтетика и частные случаи.
На практике, я думаю, по факту уже надо смотреть.
Тем не менее, в моем случае, каждые 10мсек будут полезны.
Поэтому и хватаюсь за все подряд
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
20.01.2016, 14:46
Цитата Сообщение от Shamil1 Посмотреть сообщение
В общем случае (потенциально) нативный код работает медленнее (из-за отсутствия оптимизации под конкретный процессор).
В очень сферической теории в вакууме. На самом деле все наоборот, ибо если С++ компилятор может час компилить приложение, и использовать кучу нюансов, которые он смог проанализировать за это время, то у JIT-у дается 50мс на компиляцию метода, после чего он должен его отдать. Ему не до оптимизаций, ему бы успеть хотя бы просто транслировать код.

Цитата Сообщение от aquaMakc Посмотреть сообщение
а можно поподробнее или ссылку на объяснение?
Опять же - нюансы компилятора Тыц
1
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
20.01.2016, 14:54  [ТС]
Psilon, читал этот блог, пару недель назад, решил оставить на потом,
тк автор жжет ваще не по-детски, тут без бутылки вообще никак
0
20.01.2016, 14:58

Не по теме:

Цитата Сообщение от Psilon Посмотреть сообщение
Опять же - нюансы компилятора
) подвох за каждым углом. мой мир никогда не будет прежним...

0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
20.01.2016, 16:26
Цитата Сообщение от Psilon Посмотреть сообщение
На самом деле все наоборот, ибо если С++ компилятор может час компилить приложение, и использовать кучу нюансов, которые он смог проанализировать за это время
Большинство приложений распространяются не в виде исходного кода, который нужно компилировать, а в виде готовых исполняемых файлов (exe, dll и т.п.).

Добавлено через 5 минут
Цитата Сообщение от Woldemar89 Посмотреть сообщение
В моем случае, скорее, да, как запилю - узнаю.
Если финансовое приложение допускает, что сумма зависит от порядка суммирования, то ИМХО это уже не финансовое приложение...
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
20.01.2016, 16:44  [ТС]
Цитата Сообщение от Shamil1 Посмотреть сообщение
Если финансовое приложение допускает, что сумма зависит от порядка суммирования, то ИМХО это уже не финансовое приложение...
Не бухгалтерское, но тем не менее, деньги там замешаны, и даже 10 копеек там роли не сыграют.
Цитата Сообщение от Shamil1 Посмотреть сообщение
Большинство приложений распространяются не в виде исходного кода, который нужно компилировать, а в виде готовых исполняемых файлов (exe, dll и т.п.).
Вы разницу знаете между компилятором, интерпретатором и виртуальной машиной?
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
20.01.2016, 16:56
Цитата Сообщение от Woldemar89 Посмотреть сообщение
Вы разницу знаете между компилятором, интерпретатором и виртуальной машиной?
Да.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
20.01.2016, 17:03
Цитата Сообщение от Shamil1 Посмотреть сообщение
Большинство приложений распространяются не в виде исходного кода, который нужно компилировать, а в виде готовых исполняемых файлов (exe, dll и т.п.).
Правильно. Компилятор С++ потратил час на оптимизацию кода, рассчитанного на неизвестную машину. exe же который выходит из под csc.exe по факту является обычными исходниками шарпа, то которые компилируются на целевой машине. И у JIT'а нету ЧАСОВ на компиляцию, когда он ограничен временными рамками в десятки миллисекунд.

Добавлено через 1 минуту
csc.exe не занимается оптимизациями вообще, эта работа возложена на JIT на целевой машине. И никакая априорная информация о поддерживаемых инструкциях SSE или там числе ядер не даст выигрыш, который дает тупой перебор всех возможных оптимизаций без оглядки на затрачиваемое время.
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
20.01.2016, 17:19  [ТС]
Цитата Сообщение от Shamil1 Посмотреть сообщение
Да.
Ну тогда наверно знаете о CLRRuntime, JIT, ngen, MSIL,
Так как думаете, нормально, и как подчеркивает Psilon, не спеша откомпилированный
в машинные команды код, медленней MSIL, прошедшего за десятки мсек через всю эту мясорубку?

Добавлено через 10 минут
Надеюсь довольно скоро это нововведение будет универсальным и позволит обычные приложения компилить в native.
http://habrahabr.ru/company/microsoft/blog/265889/
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
20.01.2016, 17:30
Woldemar89, это старая тема, и мне она не сильно нравится, хотя это конечно лучше чем то, что у нас сейчас. Я бы предпочел то, как в андройде начиная с 5 версии делается: приложение скачивается на устройство и на нем компилируется при установке. Было бы отлично точно также делать и тут, то есть примерно то же, но не на машине разработчика, а на целевой машине пользователя. Что-то подобное происходит при установке Paint.net, но я честно говоря не лазил по их исходникам и не знаю, что и как они делают
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
20.01.2016, 17:35
Цитата Сообщение от Woldemar89 Посмотреть сообщение
Ну тогда наверно знаете о CLRRuntime, JIT, ngen, MSIL,
Так как думаете, нормально, и как подчеркивает Psilon, не спеша откомпилированный
в машинные команды код, медленней MSIL, прошедшего за десятки мсек через всю эту мясорубку?
Я думаю, что у Вас каша в голове, если Вы объединяете "CLRRuntime, JIT, ngen, MSIL" в "мясорубку".
CLRRuntime не существует. Есть CLR, в которой последняя буква и означает Runtime.
JIT - это технология, ngen - это утилита, MSIL - это язык.
1
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
20.01.2016, 17:36  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
и не знаю, что и как они делают
Цитата Сообщение от Woldemar89 Посмотреть сообщение
ngen
По видимому.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
20.01.2016, 17:45
Цитата Сообщение от Psilon Посмотреть сообщение
Компилятор С++ потратил час на оптимизацию кода, рассчитанного на неизвестную машину.
Потратил час, выясняя как лучше распределить вычисления между регистрами, и производительность выросла на 30%.... А простым использованием SSE этот код можно было ускорить в 4 раза...
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
20.01.2016, 17:59
Shamil1, только вот JIT не использует SSE. Можно долго рассуждать о Рихтере и о том, что потенциально JIT много чего позволяет, но на практике они даже новый рюджит не смогли написать нормально, так что он оптимизирует лучше "старого" х64. И да, автоматически SSE компилятор не использует (разве что иногда, для извлечения квадратного корня и т.п, но разница там просто мизерная), а настоящий SIMD работает только в ручном режиме с соответствующим классом, только в новом фреймворке и прочее и прочее.

В мире радуг и розовых пони возможно шарп быстрее плюсов, но на практике имеем 20-50% меньшую производительность в общем случае.
Цитата Сообщение от Shamil1 Посмотреть сообщение
Потратил час, выясняя как лучше распределить вычисления между регистрами, и производительность выросла на 30%.... А простым использованием SSE этот код можно было ускорить в 4 раза...
Ну и нужно понимать, что всё это словесная эквилибристика, 30% мы имеем на выполнении всего кода, а в 4 раза - только участка, который можно оптимизировать, при условии, что его оптимизировали. В результате 1*0.7 < 0.9*1 + 0.1*0.25.

Я был бы очень рад, если бы шарп был такой производительный, но на практике это не так. Это не повод всем валить на плюсы, но и говорить, в стиле Рихтера, что у CLR замечательные возможности для оптимизации - возможностей практически нет. Знания о целевой архитектуре есть, а вот времени использовать эту информацию - нет.
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
20.01.2016, 18:06  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
Ну и нужно понимать, что всё это словесная эквилибристика, 30% мы имеем на выполнении всего кода, а в 4 раза - только участка, который можно оптимизировать, при условии, что его оптимизировали.
Золотые слова
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
20.01.2016, 19:10
Цитата Сообщение от Psilon Посмотреть сообщение
Ну и нужно понимать, что всё это словесная эквилибристика, 30% мы имеем на выполнении всего кода, а в 4 раза - только участка, который можно оптимизировать, при условии, что его оптимизировали. В результате 1*0.7 < 0.9*1 + 0.1*0.25.
Перепишите свой расчёт с учётом того, что выполнение этого маленького участка занимает 90% времени.

Добавлено через 7 минут
Цитата Сообщение от Psilon Посмотреть сообщение
JIT не использует SSE
JIT - это технология,
Цитата Сообщение от Psilon Посмотреть сообщение
В мире радуг и розовых пони возможно шарп быстрее плюсов
Обратите внимание, что это Вы сравниваете шарп с плюсами. Я же писал про нативный и промежуточный код в общем случае, причём в перспективе:
"В общем случае (потенциально) нативный код работает медленнее (из-за отсутствия оптимизации под конкретный процессор)."
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
20.01.2016, 21:16
Цитата Сообщение от Shamil1 Посмотреть сообщение
JIT - это технология,
Ну я так и понял, что вы сравниваете не реальные технологии, а то как они в вашем воображении работают. Ну что ж, ничего не могу с этим поделать

ОЧЕВИДНО, что когда я говорю про джит, я имею ввиду любой существующий джит для джавы/дотнета. Воображаемый джит на энергии астральных гномов сюда не входит, согласен.

Цитата Сообщение от Shamil1 Посмотреть сообщение
Перепишите свой расчёт с учётом того, что выполнение этого маленького участка занимает 90% времени.
Может еще предметную область поменять, где всё попроще?
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
21.01.2016, 14:57
Цитата Сообщение от Psilon Посмотреть сообщение
я имею ввиду любой существующий джит
джит - это НЕ компилятор, джит - это конкретный алгоритм выбора момента компиляции

Цитата Сообщение от Psilon Посмотреть сообщение
Может еще предметную область поменять, где всё попроще?
Меняйте, если хотите. Какое это имеет отношение к тому факту, что в программах, требующих оптимизации, обычно 10% кода выполняется 90% времени.
А если Вы до сих пор верите в корректность своего подсчёта ("В результате 1*0.7 < 0.9*1 + 0.1*0.25."), то возьмите какую-нибудь (нормально написанную) программу, требующую оптимизации и скомпилируйте её два раза:
1. С использованием IPO и PGO, но так, чтобы она работала под любым (из актуальных) процессором.
2. Без использования IPO и PGO, но под свой процессор.
И сравните скорость работы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.01.2016, 14:57

Как преобразовать Double в Decimal?
Все очень просто Convert.ToDouble(value)

Обрезать значение (усечь) decimal/double
Обрезать значение(усечь)decimal/double Привет всем, подскажите как правильно обрезать вывод операции до, к примеру, 10 знаков. ...

Аргумент 1 не удается преобразовать из double? в decimal
Не могу понять почему это происходит и как решить.Пишет аргумент 1 не удается преобразовать из double? в decimal.Подскажите как правильно...

Cannot implicitly convert type 'double' to 'decimal'
Доброго времени суток, помогите плиз. Сделал переменные duble: double cRe = -0.70176, cIm = -0.3842; Дальше сделал...

MaskedTextBox: ввод только Decimal или Double
Как сделать так чтоб можно было вводить только данные типа desimal, ну или Double?


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru