С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
R_Way
0 / 0 / 0
Регистрация: 20.09.2013
Сообщений: 5
#1

Преобразование к double - C++

20.09.2013, 14:04. Просмотров 552. Ответов 18
Метки нет (Все метки)

Есть переменная типа Timestamp. Timestamp определен как структура:
C++
1
2
3
4
5
struct Timestamp
{
    unsigned int seconds :32;
    unsigned int fraction :32;
}
, где seconds - секунды с 1970-го, а fraction - доля секунды.
Как привести Timestamp к double, чтобы получилось число секунд в виде: seconds.fraction?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2013, 14:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Преобразование к double (C++):

Ошибки error C2296: -: недопустимо, левый операнд имеет тип "double (__cdecl *)(double,double,double - C++
Думаю из-за polp #include<iostream> #include<cmath> #include<cstdlib> using namespace std; double polp(double af,double...

Преобразование из double в строку - C++
Здравствуйте, в общем такое дело, есть winapi приложение с подключаемой .dll, при подсчёте функция должна вывести в эдит дробный...

Преобразование в float и double - C++
Начал читать книгу Шилдта. В одном из его примеров было показано преобразование типов int в float. Но при компилировании выражения я...

Преобразование из char в double - C++
Как обычно зашел задать тупой вопрос: плз., скажите как из char сделать double если double(переменная) вызывает ошибку.. Да,...

Преобразование из string в double - C++
Вот простой пример демонстрирующий данную проблему: Так работает: #include <iostream> #include <cstdlib> int main() { ...

Преобразование double в bool - C++
Не удаётся сделать следующее, есть входные данные к примеру 0.5 или 1 float , нужно вернуть bool template <class T> inline T...

18
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
20.09.2013, 14:15 #2
C++
1
seconds + fraction/1000.
или какие там у Вас доли.
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
20.09.2013, 14:17 #3
Какая доля? Десятая? Сотая? Тысячная?
1
Tulosba
20.09.2013, 14:20
  #4

Не по теме:

P.S. кстати :32 следовало бы убрать. Вообще не понятно, зачем тут битовые поля

0
R_Way
0 / 0 / 0
Регистрация: 20.09.2013
Сообщений: 5
20.09.2013, 14:29  [ТС] #5
Структура предназначена для формата времени, который использует протокол NTP. В нем время передаётся в виде 64-битного числа секунд с фиксированной точкой (посередине, т.е. между 31 и 32 битом). Причем 32 бита - целое число секунд, а 31 бит после точки отвечает за точность, позволяя передавать время с точностью до 0,2 нс.
И вот этот формат нужно перевести в double.
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
20.09.2013, 15:07 #6
Ну тогда видимо так: double t = seconds + (double)fraction / 0x100000000;

Добавлено через 7 минут
Все же лучше константу записать так: (1ull << 32)
1
R_Way
0 / 0 / 0
Регистрация: 20.09.2013
Сообщений: 5
20.09.2013, 15:08  [ТС] #7
Спасибо, очень помогло!
Есть еще вопрос - как сделать обратное преобразование?)) Очень нужно.
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
20.09.2013, 15:21 #8
secs = (int)floor( t );
frac = (int)((t - secs) * 0x100000000ull);

Мозги отказываются думать.. По-моему так.
1
R_Way
0 / 0 / 0
Регистрация: 20.09.2013
Сообщений: 5
20.09.2013, 15:27  [ТС] #9
Спасибо, похоже на правду
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
20.09.2013, 15:28 #10
castaway, есть еще modf() для этих целей.
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
20.09.2013, 15:45 #11
Это не тот случай чтобы прибегать к modf, к тому же он более ресурсоемок.
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
20.09.2013, 16:47 #12
Цитата Сообщение от castaway Посмотреть сообщение
Это не тот случай чтобы прибегать к modf
Почему не тот? Задача извлечь целую и дробную части. Прям как в описании функции.
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
20.09.2013, 17:39 #13
Цитата Сообщение от Tulosba Посмотреть сообщение
Почему не тот?
Потому что это можно сделать намного быстрее не используя fmod, т.к. размер целой и дробной части нам известен.
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
20.09.2013, 18:01 #14
Цитата Сообщение от castaway Посмотреть сообщение
Потому что это можно сделать намного быстрее
Небольшой тестик http://ideone.com/ZHbltS
1
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
20.09.2013, 18:53 #15
Tulosba, спасибо. Но можешь поставить тип для fractpart и intpart как целочисленный в моем случае?
А я пока еще на код посмотрю, если ты не против
0
20.09.2013, 18:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2013, 18:53
Привет! Вот еще темы с ответами:

Преобразование из string в double - C++
Объясните пожалуйста в чем связь между преобразованием данный из string в double и библиотекой русского языка Вот так работает #include...

Преобразование Double в string - C++
Допустим у меня есть число double n = 0.0000000000 мне нужно преобразовать его в строку string s = 0.0000000000. Как это сделать?

Преобразование из AnsiString в Double - C++
Делаю калькулятор. Преобразую AnsiString в Double if(p=='+') all=all+atof(Form1-&gt;Edit1-&gt;Text.c_str()); Вывожу в Edit Exit-&gt;Text=all; ...

Преобразование строки в double - C++
Собственно есть код: #include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; double atof(const char *nPtr) ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.