Как записать в float тисячние,при записи JD= 2451545,25

Oleg.zirka
Offline
Зарегистрирован: 29.11.2017

При записи Юлианского времени недостает точности после запятой идут часы ,минуты,секунды.Нужно чтобы после запятой било ещё 5 чисел.
Так как float даёт только два знака после запятой Пробовал умножать на 10,100 но возникает другая проблема float не может сохранить такой длины значения.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Oleg.zirka пишет:
Так как float даёт только два знака после запятой
Кто Вам сказал такую глупость? По стандарту IEEE 754-2008, тип float (число с одинарной точностью) гарантированно обеспечивает 7 знаков мантиссы. 

arduinec
Offline
Зарегистрирован: 01.09.2015

ЕвгенийП пишет:

Oleg.zirka пишет:
Так как float даёт только два знака после запятой

Кто Вам сказал такую глупость? По стандарту IEEE 754-2008, тип float (число с одинарной точностью) гарантированно обеспечивает 7 знаков мантиссы. 

Так у ТС мантисса содержит уже 9 знаков.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

arduinec пишет:

Так у ТС мантисса содержит уже 9 знаков.

Да, это-то я вижу, но это не делает выражение "float даёт только два знака после запятой" менее бредовым.

arduinec
Offline
Зарегистрирован: 01.09.2015

ЕвгенийП пишет:

это не делает выражение "float даёт только два знака после запятой" менее бредовым.

С бредовостью согласен, но ТС (как обычно) не объяснил зачем он придумал "часы, минуты, секунды после зарятой".

Не смотрел есть ли в gcc, но раньше в Си были функции dostounix() и unixtodos(), которые преобразовывали время из формата DOS в UNIX и наоборот (пользовался ими когда-то) и им хватало переменной типа long.

sadman41
Offline
Зарегистрирован: 19.10.2016

Это не он придумал, это придумал:
Жозе́ф Жюст Скалиге́р — французский гуманист-филолог, историк и воин, итальянец по происхождению, один из основателей современной научной исторической хронологии, издатель и комментатор античных текстов.

Во время Скалигера о timestamp ничего не знали и ко времени относились попроще, поэтому в дате, записанной "по-Юлиански", целая часть - это дни, а дробная - часы, минуты и т.д.

Oleg.zirka
Offline
Зарегистрирован: 29.11.2017

sadman41 пишет:

Это не он придумал, это придумал:
Жозе́ф Жюст Скалиге́р — французский гуманист-филолог, историк и воин, итальянец по происхождению, один из основателей современной научной исторической хронологии, издатель и комментатор античных текстов.

Во время Скалигера о timestamp ничего не знали и ко времени относились попроще, поэтому в дате, записанной "по-Юлиански", целая часть - это дни, а дробная - часы, минуты и т.д.

ну правильно дробная часть ето :часы минуты,секунды.Все нужно для астрономии.Может попробую double там после запятой немножко больше цифр можно вписать.силка https://www.arduino.cc/reference/en/language/variables/data-types/float/
Или другой вариант ардуино due там " On the Arduino Due, doubles have 8-byte (64 bit) precision."

okta
Offline
Зарегистрирован: 10.01.2015

в ардуине double и float это одно и то же.

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

okta пишет:

в ардуине double и float это одно и то же.

Это справедливо только для плат на базе атмега(тини, в общем на 8ми битных) Для дуе это два разных типа, как и написал ТС

okta
Offline
Зарегистрирован: 10.01.2015

У ТС через "или" написано :)

Кстати, как вариант, можно сделать структуру, и в ней отдельно хранить дату, отдельно время.

А вообще, зачем понадобилось именно хранить дату/время в юлианском виде?

b707
Offline
Зарегистрирован: 26.05.2017

Oleg.zirka][quote=sadman41 пишет:

ну правильно дробная часть ето :часы минуты,секунды.Все нужно для астрономии.Может попробую double там после запятой немножко больше цифр можно вписать.силка https://www.arduino.cc/reference/en/language/variables/data-types/float/ Или другой вариант ардуино due там " On the Arduino Due, doubles have 8-byte (64 bit) precision."

проще хранить время в другом формате, без дробных частей, как уже советовали выше - например формате unix

Oleg.zirka
Offline
Зарегистрирован: 29.11.2017

Тоже читал документацию там било сказано что float и double одно и тоже самое.Пи выводе в serial.println более двух знаков после запятой не выводит.

Oleg.zirka
Offline
Зарегистрирован: 29.11.2017

Я бы и в UTC хранил нет проблем.Только там Юлианское Время JD

b707
Offline
Зарегистрирован: 26.05.2017

Oleg.zirka пишет:
При выводе в serial.println более двух знаков после запятой не выводит.

вы документацию по диагонали читаете?

serial.println выведет столько знаков, сколько закажете:

http://arduino.ru/Reference/Serial/Print

okta
Offline
Зарегистрирован: 10.01.2015

b707 пишет:

проще хранить время в другом формате, без дробных частей, как уже советовали выше - например формате unix

Я тоже сначала так подумал, но вдруг человеку дробные части секунды нужны... астрономия ж.

Oleg.zirka
Offline
Зарегистрирован: 29.11.2017

Огромное СПАСИБО.Вот я идиот,вечерком попробую))

sadman41
Offline
Зарегистрирован: 19.10.2016

Но, я думаю, вам нужно учитывать тот факт, что unixtime начинается с 1970 г.

Конвертация производится так: https://stackoverflow.com/questions/466321/convert-unix-timestamp-to-julian

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

В местной библиотеке с 2000. А так нормальная тут библиотека time.h - как везде.

sadman41
Offline
Зарегистрирован: 19.10.2016

Да уж, добавили путаницы с этой Y2K Epoch.

Хотя, если ТС нужно производить операции со временем, относящимся к более раннему, чем 1970г. / 2000 г. периоду - никакой "стандартный unixtime" ему не поможет. Придется свой изобретать.