Х##й это можно назвать только в особых условиях, о которых ты про себя подумал и решил, что у меня те же. А у меня база диалекта 1 (на сервере FB 1.0.3) и поле объявлено как numeric(15,4). Допускаю, что я отстал от жизни и такое поле не хранится как double precision со всеми вытекающими, тогда поправьте меня.CyberMax писал(а):Извини за грубость, но ты х##ню сморозил. Стыдно не знать базовые вещи о типах. Numeric/Decimal фактически хранится в виде SmallInt/Integer/BigInt в зависимости от точности и масштаба числа. Поэтому дробные части и не слетают, потому что фактически их нет.
Переполнение Integer
double precision конечноWildSery писал(а):Х##й это можно назвать только в особых условиях, о которых ты про себя подумал и решил, что у меня те же. А у меня база диалекта 1 (на сервере FB 1.0.3) и поле объявлено как numeric(15,4). Допускаю, что я отстал от жизни и такое поле не хранится как double precision со всеми вытекающими, тогда поправьте меня.CyberMax писал(а):Извини за грубость, но ты х##ню сморозил. Стыдно не знать базовые вещи о типах. Numeric/Decimal фактически хранится в виде SmallInt/Integer/BigInt в зависимости от точности и масштаба числа. Поэтому дробные части и не слетают, потому что фактически их нет.
-
- Сообщения: 53
- Зарегистрирован: 11 мар 2005, 15:44
Так, чтобы немножко прояснить ситуацию с вещественными числами...
Неточность вещественных чисел (а вернее их распространённого способа хранения в ЭВМ) в том, что конечные десятичные дроби в двоичном представлении обычно (за очень редким исключением) выглядят как бесконечные периодические дроби. А целые числа - они и в Африке целые числа и до определённой величины (когда ещё не переполняется разрядная сетка и не отбрасываются младшие значащие цифры) хранятся и обрабатываются без погрешности. Поэтому, как тут уже верно заметили, 1 + 1 всегда равно 2. И 0.25+0.25 тоже всегда равно 0.5 (потому что в двоичном представлении это конечные дроби: 0.01+0.01=0.1). А вот 0.1 в двоичном представлении выглядит как периодическая дробь 0.0(0011) и, естественно, будет обрезаться.
Неточность вещественных чисел (а вернее их распространённого способа хранения в ЭВМ) в том, что конечные десятичные дроби в двоичном представлении обычно (за очень редким исключением) выглядят как бесконечные периодические дроби. А целые числа - они и в Африке целые числа и до определённой величины (когда ещё не переполняется разрядная сетка и не отбрасываются младшие значащие цифры) хранятся и обрабатываются без погрешности. Поэтому, как тут уже верно заметили, 1 + 1 всегда равно 2. И 0.25+0.25 тоже всегда равно 0.5 (потому что в двоичном представлении это конечные дроби: 0.01+0.01=0.1). А вот 0.1 в двоичном представлении выглядит как периодическая дробь 0.0(0011) и, естественно, будет обрезаться.