Форум программистов, компьютерный форум, киберфорум
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. Показов 9036. Ответов 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
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
22.01.2016, 16:54
Студворк — интернет-сервис помощи студентам
Shamil1, отсюда, если мне память не изменяет

0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
22.01.2016, 16:56
Цитата Сообщение от maxillion Посмотреть сообщение
ну если вы думаете что оптимизация сферического коня хуже
вроде ктото утверждал что csc не оптимизирует, а fsc оптимизирует. откуда тогда оптимизация в мсиле для c# появится? или он все таки есть?

Добавлено через 1 минуту
Цитата Сообщение от Psilon Посмотреть сообщение
ну так если дебаг сборка, то результат неправильный
все тап правильное. методы разные. я ж не return Get5 делаю

Добавлено через 55 секунд
Цитата Сообщение от maxillion Посмотреть сообщение
f# и c# это практически аналоги
фигасе заява на победу
0
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
22.01.2016, 17:09
Цитата Сообщение от pycture Посмотреть сообщение
фигасе заява на победу
Я имел ввиду то что все компилируются в одно и тоже MSIL. А значит и возможности схожи, за исключением того что у f# компилятор круче в плане статического анализа и кодо-генерации. Хотя Psilon, говорит что у них разный MSIL, во что как то с трудом верится, хотя бы потому что у меня ILspy спокойно открывает f#. Ладно смысла спорить на кофейной гуще не вижу, всю правду знает только MS.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
22.01.2016, 17:28
Цитата Сообщение от maxillion Посмотреть сообщение
может просто фшарпёры работают отдельно от сишарпёров, и не чего друг о друге не знают
не может, а так оно и есть. решения обкатываются в фшарп и то что удается с запозданием в несколько лет переносится в сишарп. но удается перенести далеко не все. %50 не более
1
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,900
22.01.2016, 17:59
Цитата Сообщение от maxillion Посмотреть сообщение
компилируются в одно и тоже MSIL
MSIL один и тот же. Но не все его конструкции используются во всех языках, которые в него компилируются.
2
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
22.01.2016, 18:45
Цитата Сообщение от Shamil1 Посмотреть сообщение
Но не все его конструкции используются во всех языках
Может примерчик покажите что можно в с# но нельзя на f# (или на оборот) на MSIL ради интереса.

Добавлено через 2 минуты
Цитата Сообщение от pycture Посмотреть сообщение
решения обкатываются в фшарп
Дак получается что фшарп помойка для теста новых идей что ли
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
22.01.2016, 19:21
maxillion, не скажу конкретно за F#, но например в MSIL можно написать generic
C#
1
2
3
4
T Sum<T>(T a, T b)
{
   return a + b;
}
а на шарпе он скажет, что оператор + не определен для типа T.

Добавлено через 45 секунд
из примерчиков могу назвать фильтры исключений: они есть в Visual Basic.Net, но в шарпе их добавили только в последней версии (6.0 или 7.0). Очевидно, что в IL они поддерживались всегда
1
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
22.01.2016, 19:42
Ну если верить pycture, то IL f# самый богатый. А значить если в нем существует оптимизатор байт кода (что было бы логично), то оптимизировать более бедный IL с# ему не составит труда, это как с++ может строить и оптимизировать си но не на оборот. Может эта оптимизация просто проходит опкатку, как говорил pycture, а может уже прошла и на неё просто забили.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
22.01.2016, 20:43
Цитата Сообщение от maxillion Посмотреть сообщение
Может примерчик покажите что можно в с# но нельзя на f#
с# уже научился tailcall вставлять?
Дак получается что фшарп помойка для теста новых идей что ли
не. помойка для идей у ms была.... хаскель. из него обкатанные идеи уходили в f#. а из него уже что могли, по требованию миллионов мух кодеров, засовывали уж (как получалось) в с#,

Добавлено через 28 минут
оптимизация в f# вообще вещь занятная и непредсказуемая
Кликните здесь для просмотра всего текста

Не по теме:

F#
1
2
3
4
5
6
7
8
9
type O = { x : int }
    with static member inline (+) (a : O, b : O) = { x = a.x + b.x }
 
let inline add a b c = a + b + c
 
do
    System.Console.Write (add 3 9 10)
    System.Console.Write (add "sss" "aaa" "1")
    System.Console.Write (add {x=3} {x=9} {x=10})
превращается в MSIL(C#)
C#
1
2
3
4
5
6
public static void main@()
{
    Console.Write(22);
    Console.Write("sss" + "aaa" + "1");
    Console.Write(new Program.O(22));
}
пользовательские структуры значит оптимизить умеем, а вот встроеный стринг ну никак

1
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
22.01.2016, 20:57  [ТС]
По моему, сравнивать языки в целом - не совсем правильно.
Сравнение нужно проводить в в отдельных областях, ну не может язык иметь абсолютного превосходства (смотрим таблицы возможностей)
над всеми, каждый хорош в какой то области, и у каждого свои особенности и фичи.

Добавлено через 5 минут
Даже тот же ассемблер напрямую зависит от аппаратной части например.
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
22.01.2016, 21:04  [ТС]
Все ваши холивары по этому поводу, содержатся, как мне кажется, в условных обозначениях
Особенно, интересно последнее...
Миниатюры
Быстродействие double, decimal в x64  
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
22.01.2016, 21:13  [ТС]
Также могу сказать, что многие имеют понятия лишь о 1-5 языках,
а их на самом деле туева куча, что опять же подтверждает, что
Цитата Сообщение от Woldemar89 Посмотреть сообщение
ну не может язык иметь абсолютного превосходства над всеми
иначе бы все кодили на русском языке
Вот на нем-то выражений, оборотов, метафор, способов выражения мыслей и прочего - столько, что на всех хватит
0
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
22.01.2016, 21:20
Цитата Сообщение от pycture Посмотреть сообщение
пользовательские структуры значит оптимизить умеем, а вот встроеный стринг ну никак
Ну в этом есть не большой плюс, например для этого случая
F#
1
2
3
4
5
6
[<EntryPoint>]
let main argv =  
    "1"+"1"+"1" |> printfn "%s"
    "1"+"1"     |> printfn "%s"
    "1"         |> printfn "%s"
    0
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,900
23.01.2016, 01:39
Цитата Сообщение от maxillion Посмотреть сообщение
Может примерчик покажите что можно в с# но нельзя на f# (или на оборот) на MSIL ради интереса.
Навскидку (но точно не помню): в MSIL есть уровень доступа protected internal, а в c# такого нет. Есть и другие примеры, но это нужно смотреть спецификацию.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
23.01.2016, 09:53
Цитата Сообщение от Woldemar89 Посмотреть сообщение
как мне кажется, в условных обозначениях
это как раз таки кажется. поскольку спецов в f# (как и в другой экзотике) не так что б много то данные таблицы составляются кодераму у которых знаний чуть больше чем у школьников

Добавлено через 1 минуту
Цитата Сообщение от maxillion Посмотреть сообщение
Ну в этом есть не большой плюс, например для этого случая
и в чем он заключается? я не уловил.
0
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
23.01.2016, 09:58
Цитата Сообщение от pycture Посмотреть сообщение
и в чем он заключается? я не уловил.
подсказочка
F#
1
2
3
4
5
6
[<EntryPoint>]
let main argv =    
    let a:obj = upcast "1" 
    let b:obj = upcast "1" 
    printfn "%b" ( obj.ReferenceEquals(a,b) )
    0
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
23.01.2016, 10:17
Цитата Сообщение от maxillion Посмотреть сообщение
подсказочка
и что с того что они одинаковые? плюс неосиления сложения строк на этапе компиляции то в чем?
0
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
23.01.2016, 10:34
Цитата Сообщение от pycture Посмотреть сообщение
и что с того что они одинаковые?
Интернирование строк. экономия места на диске и в оперативе, копейки но всё же.

Кстати зная эту штуку, можно написать интересный код
C#
1
2
3
4
5
6
7
8
unsafe static void Main()
{
    fixed(char *c = "x")
    {
        *c = 'y';
    }
    Console.WriteLine("x");
}
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
23.01.2016, 10:40
Цитата Сообщение от maxillion Посмотреть сообщение
экономия места на диске и в оперативе
как экономия? с чего ей взяться? строки в рантайме складываются жрут память и процессор.
0
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
23.01.2016, 10:45
Цитата Сообщение от pycture Посмотреть сообщение
как экономия? с чего ей взяться? строки в рантайме складываются жрут память и процессор.
Ну в моем случае они складываясь создают временный объект, и после использования удаляются, а изначальные строки остаются в памяти.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.01.2016, 10:45

Как преобразовать 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?


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

Или воспользуйтесь поиском по форуму:
100
Ответ Создать тему
Новые блоги и статьи
Часы электронные
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С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru