|
TheGreatCornholio
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
|
|
Быстродействие double, decimal в x6419.01.2016, 11:48. Показов 9046. Ответов 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
|
|
| 19.01.2016, 11:48 | |
|
Ответы с готовыми решениями:
106
Быстродействие одинаковых программ x86 или x64 Какой тип использовать для денежных коэффициентов (например процент скидки)? Decimal или Double?
|
|
Master of Orion
|
||
| 21.01.2016, 15:33 | ||
Так что меня этим не проймешь: я говорю на языке, который понимает > 1 человека.Когда говорят про .Net, различают 2 компилятора: csc.exe, который фактически ничего не делает, тупо транслируя 1:1 C# в IL, не выполняя никаких оптимизаций, а и JIT-компилятор (в простонародье просто джит), который уже занимается оптимизациями (насколько позволяют временные рамки), превращает уже в инструкции целевой машины код и т.п. Так вот, еще не существует JIT-компилятора IL-кода, который по оптимизациям сделает gcc/icc/msvscc/llvm/... Да и невозможно физически за такой ограниченный промежуток времени сделать правильные выводы из окружения.
2
|
||
|
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
|
||||||||||||||||||||||
| 21.01.2016, 17:08 | ||||||||||||||||||||||
Интересно то что к .net относится еще несколько языков, например F# который транслирует
0
|
||||||||||||||||||||||
|
Master of Orion
|
|
| 21.01.2016, 19:21 | |
|
maxillion, давно уже исследовал оптимизации процессорные.
Вот, можно всю тему почитать в принципе, даю прямую ссылку на то, как С оптимизирует (плюсы в этом плане мощнее намного, вспомнить только cosntexpr) Оптимизации, производимые компилятором
1
|
|
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
|
| 21.01.2016, 19:26 | |
|
0
|
|
|
Master of Orion
|
|
| 22.01.2016, 12:15 | |
|
maxillion, ну и нужно понимать, что как раз JIT всё это дело оптимизирует, т.к. это элементарная оптимизация
19h = 25 Это практически единственное, что JIT еще может оптимизировать. И это не показатель.
2
|
|
|
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
|
||
| 22.01.2016, 12:35 | ||
|
0
|
||
|
Master of Orion
|
|
| 22.01.2016, 12:43 | |
|
maxillion, так кто ж утверждал, что JIT-компилятор всё знает на целевой машине и может все круто оптимизировать?
Вот поэтому на него и возложили оптимизации. А почему не стали дублировать оптимизации в csc, да потому что это упрощало его разработку и работу. Больше кода - больше багов, больше стоимость, дольше разработка... И да, я не уверен, что F# делает это на этапе компиляции. Т.к. это тот же .Net-язык и подчиняется он общим правилам, компилируется одним и тем же джитом, соответственно и поступать должен примерно также, как и другие нет-компиляторы.
1
|
|
|
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
|
|||||||||||||
| 22.01.2016, 13:01 | |||||||||||||
|
А что нужно знать о целевой машине для оптимизации этого кода ?
0
|
|||||||||||||
| 22.01.2016, 13:46 | |
|
Не по теме: Пока вы тут спорите, в репо corecrl идут пуши с оптимизациями simd инструкций
0
|
|
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
||||||||||||
| 22.01.2016, 14:24 | ||||||||||||
|
C#
0
|
||||||||||||
|
Master of Orion
|
|
| 22.01.2016, 14:32 | |
|
pycture, какой-то неправильный листинг, похоже на дебаг-сборку
Я выше скриншот привел.Konctantin, SIMD сейчас реализован только через библиотечку МС, насколько я помню, причем поддерживает его только RyuJit, причем если на целевой платформе SIMD'а не будет (хотя это конечно маловероятно, но все же) генерируется очень неэффективный код. Но в целом радует конечно это направление. Это не C++ AMP, но тоже ничо.
1
|
|
|
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
|
|
| 22.01.2016, 15:11 | |
|
0
|
|
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
|||
| 22.01.2016, 15:16 | |||
|
Добавлено через 45 секунд
0
|
|||
|
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
|
|||
| 22.01.2016, 15:21 | |||
|
Добавлено через 4 минуты
0
|
|||
|
Master of Orion
|
|||
| 22.01.2016, 15:28 | |||
![]() Поэтому они есть в JIT'е, в котором эти самые оптимизации ограничены по времени, и предподсчитать цикл он не может. Какие еще вопросы? Почему они так сделали? Потому что не хотели тратить лишние деньги, вот и все. Не считая потенциальных подводных камней. Когда модуль оптимизации один, всё просто и понятно. Когда их несколько, то начинаются забавные взаимные эффекты. Стоит вспомнить например ObjC, в котором ТРИ разных сборщика мусора, которые могут подраться и удалить живой объект.
1
|
|||
|
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
|
||
| 22.01.2016, 15:39 | ||
|
Да ладно, не кипятитесь вы так , это всего лишь вопрос.
0
|
||
|
Master of Orion
|
||
| 22.01.2016, 15:45 | ||
![]() Это конечно всё мои фантазии, но в принципе это возможные причины.
2
|
||
|
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
|
||
| 22.01.2016, 15:52 | ||
0
|
||
|
Master of Orion
|
|
| 22.01.2016, 16:23 | |
|
maxillion, еще раз, если есть различия на уровне Il'а, то комплияторы csc.exe fsc.exe по разному компилируют. Что наверняка так, ибо языки принципиально различаются. После того, как Il скомпилился, он будет одним и тем же джитом обрабатыаться. В шарпе проблема в том, что есть 2 этапа компиляции: text -> IL, IL -> x86. Хотя вопрос привычки. С тем же успехом люди часто путаются в потоках, например (stream/thread), есть еще пара мелочей. Со временем путаница проходит.
1
|
|
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,900
|
||
| 22.01.2016, 16:45 | ||
|
Оптимизацию можно условно поделить на "алгоритмическую" и "железную". Замена константной функции на константу, замена хвостовой рекурсии и т.п. - это "алгоритмическая" оптимизация. Подобной оптимизацией должен заниматься "компилятор в промежуточный код". А "железной" (т.е. под конкретное железо) оптимизацией должен заниматься "компилятор из промежуточного кода в машинный". "Железная" оптимизация по сути сводится к нахождению в коде неких шаблонов и замена их на соответствующий машинный код.
Добавлено через 55 секунд
1
|
||
| 22.01.2016, 16:45 | |
|
Как преобразовать Double в Decimal? Обрезать значение (усечь) decimal/double Аргумент 1 не удается преобразовать из double? в decimal
MaskedTextBox: ввод только Decimal или Double Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|