Виктор "Витус" Вагнер ([info]vitus_wagner) wrote,

И еще о Кнуте

В процессе дискуссии по предыдущему посту, полез в Википедию смотреть дату рождения Кнута и обнаружил, что когда настанет конец эпохи, Кнуту будет ровно 100 лет и одна неделя.
Tags: непричесанные ассоциации

  • 34 comments

[info]tarkhil

January 1 2010, 09:40:17 UTC 2 years ago

И почему меня это не удивило?

[info]karpion

January 1 2010, 11:13:51 UTC 2 years ago

-1.

Сто лет - ни фига не круглая дата. Вот если бы было 64, 128 или 256 - было бы интересно.

А как определяется конец эпохи? Я знаю, что её начало совпадает с началом 1970-го года; а конец откуда взялся?

[info]__const__

January 1 2010, 11:46:24 UTC 2 years ago

подсказка: нумерация секунд, целое

[info]karpion

January 1 2010, 12:26:11 UTC 2 years ago

Во-первых, умные люди используют unsigned int. Во-вторых, к 2038-му году все перейдут на 64-битные системы (ну, если муслимы не разрушат цивилизацию).

[info]arilou

January 1 2010, 14:40:29 UTC 2 years ago

Не все умные люди в состоянии проверить исходный код всего, что они используют, на предмет того, не стоит ли где-то просто 'int'. И вот как раз в 2038 и узнаем, кто ещё не перешёл на полностью 64-битные системы, да ещё и использует программу с такой неаккуратностью в коде.

Скажем, есть ли уверенность, что в 2038 не будут использоваться какие-нибудь нано-компьютеры ;) настолько мелкие, что 64 бита для них будет непозволительной роскошью. Вот будут они там мирно делать своё дело, невидимые глазу, а где-то внутри будет сидеть что-то вроде 'int t = time();'...

[info]suvorow_

January 12 2010, 10:15:13 UTC 2 years ago

Если в исходном коде стоит int, то при компиляции на новой платформе переменная автоматически станет машинным словом, т.е. 64-битной :) проблемы такого рода всегда бывают с бинарниками, а не с софтом, доступным в исходных текстах.

[info]vitus_wagner

January 12 2010, 10:18:30 UTC 2 years ago

Если там стоит int, то на всех известных мне 64-битных платформах он останется 32битным. А в Win64 и long int останется. Там только указатели и long long 64-битные.

[info]lionet

January 1 2010, 16:41:11 UTC 2 years ago

unsigned int? А 1954 год ты как закодируешь unsigned int'ом? :)

[info]vitus_wagner

January 2 2010, 07:13:17 UTC 2 years ago

А зачем? В 1954 году данного компьютера не существовало. Поэтому ему нет необходимости это время учитывать.

[info]lionet

January 2 2010, 07:29:37 UTC 2 years ago

1. SUS и ISO 1003.1 хотя и не требуют unsigned, но явно говорят, что time_t специфицирован как signed в куче мест.

2. Учитывать необходимо хотя бы затем, что это представление не только для вновь образующихся логов используется. Есть и исторические данные, такие как дни рождения. Конечно, их лучше сразу в чём-то типа ISO8601 хранить, но по факту есть (остаётся, см. #1) куча мест, где time_t применяется для кодирования дат, произошедших ранее 1970 года. Поэтому.

3. Соответственно, нужно хранить даты не в unsigned int (если уж мы unixtime храним), а в time_t.

[info]gegmopo4

January 2 2010, 09:03:33 UTC 2 years ago

А как быть с родившимися в 1901 году или раньше? 32-битный time_t даже XX век весь не перекрывает.

[info]lionet

January 2 2010, 09:08:51 UTC 2 years ago

«Как быть» или «как бывает»? Аналог того, «как бывает» мы уже видели в районе 2000 года, когда народу плюс-минус сто лет добавляли.

Так и бывает.

Как быть — это совсем другой вопрос, и он не решается unsigned int'ом ну никак.

[info]gegmopo4

2 years ago

[info]lionet

2 years ago

[info]gegmopo4

2 years ago

[info]lionet

2 years ago

[info]gegmopo4

2 years ago

[info]vitus_wagner

January 2 2010, 16:48:21 UTC 2 years ago

А кто сказал, что тип данных, предназначенный для хранения ТЕКУЩЕГО времени можно использовать для дат рождения или дат исторических событий?

[info]gegmopo4

2 years ago

[info]gegmopo4

January 2 2010, 09:08:04 UTC 2 years ago

Кстати, ((time_t)-1) используется для индикации ошибки. Это к вопросу о использовании отрицательных значений.

[info]lionet

January 2 2010, 09:09:36 UTC 2 years ago

Это неважно, так как при беззнаковом time_t (time_t)-1 не перестаёт иметь смысл.

[info]gegmopo4

2 years ago

[info]lionet

2 years ago

[info]netch

January 10 2010, 12:54:49 UTC 2 years ago

> но явно говорят, что time_t специфицирован как signed в куче мест.

Знаковость time_t полностью того же рода, что, например, ssize_t: в отрицательной области единственное осмысленное значение - минус единица. Поэтому те, кто "time_t применяется для кодирования дат, произошедших ранее 1970 года", неправы по определению и это нужно менять вперёд прочего. Ну или не называть это словом time_t.

> Соответственно, нужно хранить даты не в unsigned int (если уж мы unixtime храним), а в time_t.

В julian days. Это наименее вредоносный из всех вариантов.

[info]lionet

January 10 2010, 13:20:13 UTC 2 years ago

неправы по определению

Приведите определение, плиз.

[info]netch

2 years ago

[info]kiryl

January 1 2010, 17:58:23 UTC 2 years ago

А умные люди -- это кто? time_t -- это long int.

[info]gegmopo4

January 2 2010, 09:05:58 UTC 2 years ago

С каких это пор? И long int — это сколько в битах?

[info]kiryl

January 2 2010, 12:21:56 UTC 2 years ago

32-бита на 32-х битных системах. 64-бита на 64-х битных.

[info]fk0

January 2 2010, 08:46:24 UTC 2 years ago

Я заложил в прибор разработанный в 2008г. typedef int32_t time_t.
Потому, что uint64_t на той платформе практически невозможен.
А что мне было делать? И таких примеров миллион. Ну да вряд ли
оно до 2038 доживёт. В следующий раз я подумаю, чтоб всё что меньше
2010, и что меньше нуля, отображать на будущие даты. Сотня лет запаса будет.

[info]fk0

January 2 2010, 08:48:08 UTC 2 years ago

В некоторых задачах нужны даты в прошлом. Там где не нужны можно и unsigned, и всё что меньше текущий_год-1 перенести на будущее. А там где даты из прошлого нужны -- не отвертишься...

[info]karpion

January 2 2010, 14:57:46 UTC 2 years ago

Но даты в прошлом получаются только в 20-м веке, что не очень удобно.

[info]gegmopo4

January 2 2010, 09:22:56 UTC 2 years ago

Кстати, о будущем. Оно уже наступило.
  • 34 comments
Create an Account
Forgot your login or password?
Facebook Twitter More login options
English • Español • Deutsch • Русский…