Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2011, 23:52   #1
ardor
Пользователь
 
Регистрация: 16.11.2009
Сообщений: 51
По умолчанию InterlockedExchangeAdd

Как использовать эту функцию с типом double??? Числа прибавляются дробные и немаленькие. так что подходит только double или long double. Но метод просит именно long. Что подскажете?

З.Ы. Програму пишу в универ. В задании четко прописано, что использовать только атомарные операции Interlocked.
ardor вне форума Ответить с цитированием
Старый 20.11.2011, 00:02   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> Как использовать эту функцию с типом double?

никак
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 20.11.2011, 02:18   #3
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

ardor

Как использовать эту функцию с типом double???

никак.

З.Ы. Програму пишу в универ. В задании четко прописано, что использовать только атомарные операции Interlocked.

Четко прописываешь что задание выполнить невозможно в связи с его (задания) тупизной.
Rififi вне форума Ответить с цитированием
Старый 20.11.2011, 09:12   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

что ж вы так сразу... может не зря целая отрасль программирования занимается разработкой алгоритмов на целых числах?..

по теме:
как вариант узнаете точность дабла и все ваши даблы домнажаете, получа инты... тут конечно надо подумать над хранением и операциями
p51x вне форума Ответить с цитированием
Старый 20.11.2011, 09:36   #5
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

вообще-то размер double 8 байт, Interlocked-функции работают с LONG, т.е. 4 байта. Если работать с double по частям, то операция уже будет не атомарной, и будет потерян весь смысл использования Interlocked-функций
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 20.11.2011, 10:45   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от haruhi Посмотреть сообщение
вообще-то размер double 8 байт, Interlocked-функции работают с LONG, т.е. 4 байта. Если работать с double по частям, то операция уже будет не атомарной, и будет потерян весь смысл использования Interlocked-функций
Вообще-то сама организация double сильно отличается от long и даже 4-байтовый float туда не подсунуть. Ну, и так-то есть InterlockedExchangeAdd64, но всё равно это не поможет.
pu4koff вне форума Ответить с цитированием
Старый 21.11.2011, 03:50   #7
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> использовать только атомарные операции Interlocked

ну в принципе, можно долбить в цикле InterlockedCompareExchange(flag, 1, 0), пока оно нам не вернёт 0, после чего спокойно сложить свои double, и сбросить flag в 0. Это если задасться целью использовать именно атомарные операции Interlocked где надо и где не надо
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц