powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / вы думаете что 1+(-1) = 0? а вот и нет
76 сообщений из 76, показаны все 4 страниц
вы думаете что 1+(-1) = 0? а вот и нет
    #39478820
bigker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не могу найти на форуме. но проблема старая и я был уверен что давно решенная
Oracle 11.2.0.3.0 64 bit

ситуация следующая. есть средних размеров таблица. начиная с определенного момента запрос
вида
Код: sql
1.
select   t.num,  sum(t.num)over() nsum from mytable t where ....


стал выдавать следующие данные:
Код: plaintext
1.
2.
3.
          num         nsum
1     -17,3563     -2,3E-37
2      17,3563     -2,3E-37
что в общем приводит к неприятным последствиям

с чем связан этот баг в целом понятно - особенности хранения вещественных чисел. вопрос в другом, как с этим бороться? получается что ни в одном запросе нельзя использовать суммирование без округления? результат не гарантирован. или архитектурно прописывать всегда точность хранения....
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39478825
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bigkerс чем связан этот баг в целом понятноЗаблуждаешься.
RTFM set numwidth, DUMP, TO_CHAR
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39478862
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bigker,

Странно, у меня вот так например:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with t as (select -17.3563 num from dual union all
select 17.3563 from dual )

select   t.num,  sum(t.num)over() nsum from t

NUM	     NSUM
-17.3563	0
17.3563  	0

2 rows selected.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39478869
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXLСтранно, у меня вот так например:А надо так:
Код: plsql
1.
-17.3563-2.3e-37
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39478884
IgorSm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как раз на тему "всегда ли определять Number?"
http://www.sql.ru/forum/1264000-1/vsegda-li-opredelyat-number
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39478932
bigker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вобщем я понимаю так - то что я не вижу знака в 37 разряде после запятой - не значит что его там нет. и нужно было озаботиться округлением (trunc) самому. либо при записи данных, либо при суммировании. Все вокруг сплошной обман =)
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39478940
bigkerНу вобщем я понимаю так - то что я не вижу знака в 37 разряде после запятой - не значит что его там нет. и нужно было озаботиться округлением
Озаботиться нужно заданием необходимых масштаба и точности для поля с типом данных NUMBER, а не вбиванием костылей в виде округления и усечение имеющихся данных.
И, да (поскольку структура таблицы не показана) - избегать применения машинных числовых типов (binary_float & binary_double) если требуется фиксированная точность вычислений.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39478941
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bigkerНу вобщем я понимаю так - то что я не вижу знака в 37 разряде после запятой - не значит что его там нет.Да.
bigkerокруглением (trunc)Ты уж определись.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39478943
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
молчать и слушать, молчать и слуизбегать применения машинных числовых типов (binary_float & binary_double)Ни один из этих типов не может дать наблюдаемой здесь точности (погрешности)
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39478973
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicмолчать и слушать, молчать и слуизбегать применения машинных числовых типов (binary_float & binary_double)Ни один из этих типов не может дать наблюдаемой здесь точности (погрешности)
Даже binary_double легко дает гораздо большую погрешность:
Код: plsql
1.
2.
3.
4.
5.
6.
SQL>select to_char((1+power(2,-54)) - cast(cast(1+power(2,-54) as binary_double) as number),'0.99999eeee') err
from dual;

ERR         
-------------
  5.55112E-17 
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479062
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousгораздо большую погрешностьпредлагаю задуматься над словом "наблюдаемой", сравнить порядок погрешности и исходной величины.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479066
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-andrey_anonymousгораздо большую погрешностьпредлагаю задуматься над словом "наблюдаемой", сравнить порядок погрешности и исходной величины.
Раскройте пожалуйста свою мысль.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479067
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousРаскройте пожалуйста свою мысль.Сперва ты: ты мне возражал или же подтверждал мой тезис своим примером?
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479068
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous-2-пропущено...
предлагаю задуматься над словом "наблюдаемой", сравнить порядок погрешности и исходной величины.
Раскройте пожалуйста свою мысль.Между 10 1 и 10 -38 требуется точность 40 значащих цифр. binary_double дает до 18 десятичных знаков.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479072
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-andrey_anonymousпропущено...

Раскройте пожалуйста свою мысль.Между 10 1 и 10 -38 требуется точность 40 значащих цифр. binary_double дает до 18 десятичных знаков.
И что из этого следует?
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479085
kernA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bigkerне могу найти на форуме. но проблема старая и я был уверен что давно решенная
Oracle 11.2.0.3.0 64 bit

пропущено...

с чем связан этот баг в целом понятно - особенности хранения вещественных чисел. вопрос в другом, как с этим бороться? получается что ни в одном запросе нельзя использовать суммирование без округления? результат не гарантирован. или архитектурно прописывать всегда точность хранения....

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
create table t123(a number, b number);

insert into t123 values (1,1);
insert into t123 values (-1/3,2);
insert into t123 values (-1/3,3);
insert into t123 values (-1/3,4);

select b, a, sum(a) over () nsum from t123



Код: plaintext
1.
2.
b  a  nsum
1  1  3,4E-39

По логике, после вычисления надо округлять.
Могут не сойтись условия a-b=0, либо минус между множествами.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479094
kernA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kernAМогут не сойтись условия a-b=0.

* имелось ввиду значения из одной колонки, сгруппированные по определённому признаку
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479112
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous-2-пропущено...
Между 10 1 и 10 -38 требуется точность 40 значащих цифр. binary_double дает до 18 десятичных знаков.
И что из этого следует?

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

проблема же автора скорее из отряда того, что у него клиенские double/float (а это очень распостраненная практика - преобразовывать number, который base100 разновидность BCD в типы IEEE на клиенте, ибо там других типов нет) пишутся в базу данных без специальной коррекции, в результате он наступает на проблему

http://0.30000000000000004.com/

и тут ему только в trunc()/round(), ну и в dump() для полного просвещения, сама же СУБД тут абсолютно ни при чем.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479187
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchandrey_anonymousпропущено...

И что из этого следует?

следует то, что некорректно сравнивать граничные number и binary_float
:)

Фикус немного в другом.
number в oracle имеет не только десятичную мантиссу, но и, что более важно, десятичный порядок.
Числа, представленные в IEEE-754, имеют двоичный порядок.
И тут наступает смешная штука - множества представимых чисел в этих представлениях тупо не совпадают .
И чем больше порядок - тем больше расстояние между представимыми числами, и, следовательно, больше абсолютная погрешность.
В итоге, сохраняя IEEE-754 (а они бывают 32, 64, и 80 бит) во вроде бы более точный number, получаем по факту потерю точности, поскольку в number не всегда возможно представить значение double.
Потому и ввели в 12с binary_double и binary_float, чтобы классические приложения могли хранить данные без преобразования и не "наступать".
И в этой связи мне показался слегка странным данный тут совет избегать этих типов.
Если что - устриц ел, в смысле - приходилось как-то плотно заниматься "самопальным" преобразованиями из IEEE-754 в number и обратно.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479198
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousdbpatchпропущено...


следует то, что некорректно сравнивать граничные number и binary_float
:)

Фикус немного в другом.
number в oracle имеет не только десятичную мантиссу, но и, что более важно, десятичный порядок.
Числа, представленные в IEEE-754, имеют двоичный порядок.

не совсем десятичный, там base100. но с натяжкой ок, можно считать десятичным :)
http://www.orafaq.com/wiki/Number#Internal_storage


andrey_anonymousИ тут наступает смешная штука - множества представимых чисел в этих представлениях тупо не совпадают .
И чем больше порядок - тем больше расстояние между представимыми числами, и, следовательно, больше абсолютная погрешность.
В итоге, сохраняя IEEE-754 (а они бывают 32, 64, и 80 бит) во вроде бы более точный number, получаем по факту потерю точности, поскольку в number не всегда возможно представить значение double.

а не наоборот ???

andrey_anonymousПотому и ввели в 12с binary_double и binary_float, чтобы классические приложения могли хранить данные без преобразования и не "наступать".
сомнительно, ИМХО это было скорее для вопроса перфоманса.

andrey_anonymousИ в этой связи мне показался слегка странным данный тут совет избегать этих типов.\
Oracle в подавляющем большинстве случаев используется для подсчета и хранения денег, а использование там нативного
double вообще говоря преступление с т.з. бухгалтерий всяких (если у тебя нет библиотеки для "нормализации" копеек после умножений и делений).

в IBM вообще есть целая библиотека для "правильного" подсчета денег https://github.com/libdfp/libdfp
даром что ей никто не пользуется (в Java и .NET тоже есть имплементации, тоже непопулярные).

andrey_anonymous Если что - устриц ел, в смысле - приходилось как-то плотно заниматься "самопальным" преобразованиями из IEEE-754 в number и обратно.
да нет там никаких устриц, задача для начального уровня. я с ней столкнулся практически на второй неделе после того, как вообще начал работать программистом - мне принесли два отчета где цифры Итого не сходились.

странно, что неофиты до сих пор наступают на такие грабли, и никто не решил проблему системно
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479211
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchне совсем десятичный, там base100. но с натяжкой ок, можно считать десятичным :)

Сам когда-то так полагал (и вроде даже писал на этом форуме).
Но там чистый BCD.
Если конвертировать по-байтно - то да, удобно в сторичной считать.
Однако в контексте беседы это вообще не имеет значения.

dbpatchandrey_anonymousИ тут наступает смешная штука - множества представимых чисел в этих представлениях тупо не совпадают .
И чем больше порядок - тем больше расстояние между представимыми числами, и, следовательно, больше абсолютная погрешность.
В итоге, сохраняя IEEE-754 (а они бывают 32, 64, и 80 бит) во вроде бы более точный number, получаем по факту потерю точности, поскольку в number не всегда возможно представить значение double.
а не наоборот ???

Что конкретно наоборот?
Расстояние между представимыми числами, точность или невозможность представить IEEE-754 в number?

dbpatchandrey_anonymousПотому и ввели в 12с binary_double и binary_float, чтобы классические приложения могли хранить данные без преобразования и не "наступать".
сомнительно, ИМХО это было скорее для вопроса перфоманса.

Что-то я сомневаюсь относительно заметного "перформанс гаин" :)

dbpatchстранно, что неофиты до сих пор наступают на такие грабли, и никто не решил проблему системно
Так нет тут "системной проблемы", потому и не решают.
Всего лишь особенности машинных вычислений, которые по идее должны преподаваться на профильных курсах.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479256
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот более "чистая" иллюстрация несовпадения представимых множеств IEEE-754 и number:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
clear
set numwidth 20
with t as (
select 1.000000000000001d bd
     , cast(1.000000000000001d as number) bd2n 
     , 1.000000000000001 n
from dual
connect by level < 10000
)
select min(n) as "Number", sum(n) "Number Calc", min(bd) "IEEE-754 double  ", sum(bd) "IEEE754 double Calc", min(bd2n) "IEEE->Number", sum(bd2n) "IEEE->Number Calc" from t
;

              Number          Number Calc IEEE-754 double   IEEE754 double Calc         IEEE->Number    IEEE->Number Calc
-------------------- -------------------- ----------------- ------------------- -------------------- --------------------
   1.000000000000001 9999.000000000009999 1.000000000000001 9999.000000000002     1.0000000000000011 9999.0000000000109989 


Как видно и примера, само по себе десятичное 1.000000000000001 представимо в number, но не представимо в double, хотя и делает вид, что представимо :)
Ближайшее к 1.000000000000001 представимое в double - это '3FF0000000000005', однако это НЕ 1.000000000000001 и при конвертации double->number получаем ближайшее представимое в number - 1.0000000000000011

Одновременно иллюстрация про точность.
Как видим, суммирование в number дает корректный результат.
Однако суммирование в double идет с потерей точности, поскольку мантиссы в 6.5 байт для представления суммы не хватает.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479268
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousdbpatchне совсем десятичный, там base100. но с натяжкой ок, можно считать десятичным :)

Сам когда-то так полагал (и вроде даже писал на этом форуме).
Но там чистый BCD.

ой да ладно. base100 это и разновидность BCD, но если мы говорим про IBM варианты, то .... блин, да нет понятия чистый BCD
https://en.wikipedia.org/wiki/Binary-coded_decimal



andrey_anonymousdbpatchа не наоборот ???

Что конкретно наоборот?
Расстояние между представимыми числами, точность или невозможность представить IEEE-754 в number?
всякий IEEE-754 можно представить как number, но не наоборот.
ты говорил что как раз не всякий IEEE-754 можно в number, что не есть научно


andrey_anonymousdbpatchстранно, что неофиты до сих пор наступают на такие грабли, и никто не решил проблему системно
Так нет тут "системной проблемы", потому и не решают.
Всего лишь особенности машинных вычислений, которые по идее должны преподаваться на профильных курсах.

это не техническая системная проблема, а проблема организационная.

практически все актуальные языки программирования имеют реализацию Money/Currency или подобного, от Fixed pointer до BCD вариаций, но этим никто не пользуются, все почему-то считают деньги через double, который без специальных библиотек можно использовать лишь для инженерных/научных расчетов, но никак не для бухгалтерий

есть даже специальный вид консалтинга - приходят и начинают код "линтать", на предмет некорректного использования double (первым делом ищут операторы деления и умножения, находят практически каждый раз в новом коде)
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479274
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchandrey_anonymousпропущено...
Сам когда-то так полагал (и вроде даже писал на этом форуме).
Но там чистый BCD.
ой да ладно. base100 это и разновидность BCD

Ну покажи вариант BCD, который нельзя назвать "BASE 100" :)

dbpatchвсякий IEEE-754 можно представить как number, но не наоборот.

Неправда ваша.
Пример - выше :)
Что до научности - то независимо от системы счисления множество вещественных чисел нельзя представить ни в одном из машинных представлений уже просто ввиду перечислимости представимых множеств.
Из первого попавшегося можно почитать здесь:
http://www.softelectro.ru/ieee754.html
7.4 Точность представления вещественных чисел в формате IEEE754

А в обсуждаемом случае имеем ошибку преобразования из одного представления в другое просто ввиду несовпадения множеств представимых чисел.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479281
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousdbpatchпропущено...

ой да ладно. base100 это и разновидность BCD

Ну покажи вариант BCD, который нельзя назвать "BASE 100" :)


Я дал ссылку на википедию, все описанные там варианты BCD - не base 100.


andrey_anonymousdbpatchвсякий IEEE-754 можно представить как number, но не наоборот.

Неправда ваша.
Пример - выше :)

какой такой пример? с power? ну так power для double выдает искаженный результат, но это не означает, что существует
какое-то представимое в double число, которое нельзя воткнуть в number без потери значимых цифр.

или еще раз - число, в студию, которое можно присвоить в double, но нельзя такое-же число получить в number без искажений :)

andrey_anonymousЧто до научности - то независимо от системы счисления множество вещественных чисел нельзя представить ни в одном из машинных представлений уже просто ввиду перечислимости представимых множеств.
Из первого попавшегося можно почитать здесь:
http://www.softelectro.ru/ieee754.html
7.4 Точность представления вещественных чисел в формате IEEE754

А в обсуждаемом случае имеем ошибку преобразования из одного представления в другое просто ввиду несовпадения множеств представимых чисел.

вот жеж блин :\

где я говорил, что бесконечное множество вещественных чисел можно представить в number?
число 0.3(3), как результат 1/3 нельзя представить ни в double, ни в number, без потери точности, это и ежу понятно,

речь же была про другое, про то, что не всякий double можно в number - я к этому утверждению (ложному) и придрался

говоря проще - я утверждал (вернее предпологаю), что все конечное множество числел double можно поместить в множество number.


вот и прошу опровергнуть оное, примерами непомещаемых чисел
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479284
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchчисло 0.3(3), как результат 1/3 нельзя представить ни в double, ни в number, без потери точности, это и ежу понятно
Зато 1/3 легко представить в системе счисления по основанию 3 точно также, как 1/7 - в системе счисления по основанию 7, 1/10 - в системе счисления по основанию 10.
Так понятнее?
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479285
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousНу покажи вариант BCD, который нельзя назвать "BASE 100" :)

base100 это просто конкретный алгоритм и формат представления чисел в виде последовательности байт, а не некое понятие "по основанию 100"

https://amitzil.wordpress.com/2015/03/24/how-are-numbers-saved-in-oracle/

и этот BASE1000 алгоритм подобен BCD алгоритмам IBM, которые делают то или иное кодирование/декодирование и представление в виде байт, но, строго говоря, никогда официально как BCD не назывался
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479287
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousdbpatchчисло 0.3(3), как результат 1/3 нельзя представить ни в double, ни в number, без потери точности, это и ежу понятно
Зато 1/3 легко представить в системе счисления по основанию 3 точно также, как 1/7 - в системе счисления по основанию 7, 1/10 - в системе счисления по основанию 10.
Так понятнее?

нет, не понятее, как это все основание по 3 относится к теме double vs number

понятное дело, что будь у нас не 10 пальцев, а, допустим, 16, то мы бы использовали систему счисления по основанию 16 (некоторые древние народы даже 60-ричные системы умудрялись использовать), но это уже совсем офтопик и не отвечает на мой вопрос: какое такое впихуемое в double нельзя впихнуть в number?
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479297
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchandrey_anonymousпропущено...

Зато 1/3 легко представить в системе счисления по основанию 3 точно также, как 1/7 - в системе счисления по основанию 7, 1/10 - в системе счисления по основанию 10.
Так понятнее?
нет, не понятее, как это все основание по 3 относится к теме double vs number


Пример я приводил выше.
Основания степени для вещественных имеют непосредственное отношение к дистанции между представимыми числами.
number - основание 10
double - основание 2
троичная - основание 3
В любой из этих систем счисления можно реализовать представление степени и мантиссы по аналогии с IEEE754 (кстати, в IEEE-754-2008 появились decimal).

Но при этом множества представимых вещественных чисел между этими системами НЕ совпадут.
1/3 и 1/10 - просто самый очевидный пример несовпадения представимых множеств.
Но 1/2 и 1/10 - тоже не совпадают.
И это медицинский факт.
Конкретный пример для double я привел выше.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479305
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousКонкретный пример для double я привел выше.

никакого такого примера я не увидел. пример с power(2,-54) не актуален - обратное преобразование в из number дает изначальный результат:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SQL> SELECT
     i.*,
     DUMP(a),
     DUMP(b),
     CAST(a AS NUMBER),
     DUMP(CAST (a AS NUMBER)),
     DUMP(1)
   FROM (
     SELECT
       a,
       CAST(CAST(a AS NUMBER) AS binary_double) b
     FROM (
       SELECT CAST(1+POWER(2,-54) AS binary_double) a FROM dual
     )
   ) i;
         A          B DUMP(A)                             DUMP(B)                              CAST(AASNUMBER) DUMP(CAST(AASNUMBER))  DUMP(1)
---------- ---------- ----------------------------------- ------------------------------------ --------------- ---------------------- ------------------
         1          1 Typ=101 Len=8: 191,240,0,0,0,0,0,0  Typ=101 Len=8: 191,240,0,0,0,0,0,0                 1 Typ=2 Len=2: 193,2     Typ=2 Len=2: 193,2



еще раз - речь не про выражения, сложения или вычитания и их результат,
речь про конкретное число, которое или может или не может быть преобразовано из double в number без искажений

такое число будет?
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479437
Elicмолчать и слушать, молчать и слуизбегать применения машинных числовых типов (binary_float & binary_double)Ни один из этих типов не может дать наблюдаемой здесь точности (погрешности)Согласен.
В данном случае не к месту.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479440
andrey_anonymousИ в этой связи мне показался слегка странным данный тут совет избегать этих типов.
А в чем странность совета избегать хранения чисел десятичной точности в типах данных двоичной точности?
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479442
andrey_anonymousНо там чистый BCD.
Код: plsql
1.
Select level-1 n,Dump(cast(Level-1 As Number),16) d From dual Connect By Level<=102


В каком месте там BCD?
Там именно base100.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479446
dbpatchчисло, в студию, которое можно присвоить в double, но нельзя такое-же число получить в number без искажений :)
таки их есть на свете, если быть строгими:
1/2=0,5 - 1 значащая цифра
1/2 2 =0,25 - 2 значащие цифры
1/2 3 =0,125 - 3 значащие цифры
1/2 39 и далее = ... - 39+ значащих цифр, более 38 цифр в Number-е не отразишь, приехали :)
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479447
То есть, если длина мантиссы значения, сохраняемого в binary_double , превышает 38 бит - такое значение невозможно точно отразить во множестве допустимых значений формата Number.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479451
aduka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
молчать и слушать, молчать и слу,
1/2 4 =0,0625 - 3 значащие цифры
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479485
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatch(некоторые древние народы даже 60-ричные системы умудрялись использовать), но это уже совсем офтопик и не отвечает на мой вопрос: какое такое впихуемое в double нельзя впихнуть в number?
Некоторые и по сей день минуты и секунды в ней считают. :)
Что касается IEEE-754, то наверное далеко ходить не надо:
Код: plsql
1.
select dump(0),dump(-0),dump(-0d) from dual;



Хотя нонче, не то что давеча . :)
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479492
aduka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
молчать и слушать, молчать и слуТо есть, если длина мантиссы значения, сохраняемого в binary_double , превышает 38 бит - такое значение невозможно точно отразить во множестве допустимых значений формата Number.
Невозможно, если длина мантиссы превышает 50 бит.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479496
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka,

да что вы к мантиссе то привязались:
Код: plsql
1.
2.
select dump(1.79e308d) from dual;
select cast(1.79e308d as number) from dual;
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479502
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И это еще, даже не спор о том, какое значение sin(
) правильнее. :)
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479605
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньевaduka,

да что вы к мантиссе то привязались:
Код: plsql
1.
2.
select dump(1.79e308d) from dual;
select cast(1.79e308d as number) from dual;




ок, про мантиссу принято, бревна в глазу я не заметил.

хотя диапазон чисел более 1.0E126 и менее 1.0E-130 вызывает сильные сомнения практического применения, но это уже нытье лузера, ни разу не спорт ;)

долго же вы держались...
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479607
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
молчать и слушать, молчать и слуdbpatchчисло, в студию, которое можно присвоить в double, но нельзя такое-же число получить в number без искажений :)
таки их есть на свете, если быть строгими:
1/2=0,5 - 1 значащая цифра
1/2 2 =0,25 - 2 значащие цифры
1/2 3 =0,125 - 3 значащие цифры
1/2 39 и далее = ... - 39+ значащих цифр, более 38 цифр в Number-е не отразишь, приехали :)

так их и в Double не отразишь :)
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479609
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
молчать и слушать, молчать и слуandrey_anonymousНо там чистый BCD.
Код: plsql
1.
Select level-1 n,Dump(cast(Level-1 As Number),16) d From dual Connect By Level<=102


В каком месте там BCD?
Там именно base100.

base 100 относится к семейству BCD. BCD форматов существует масса разновидностей, абсолютно между собой не совместимых.
у них только одно общее - они все кодируют десятичные цифры, а не двоичные, все остальное - произвольно (форматы и алгоритмы)
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479737
aduka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbpatchмолчать и слушать, молчать и слупропущено...

таки их есть на свете, если быть строгими:
1/2=0,5 - 1 значащая цифра
1/2 2 =0,25 - 2 значащие цифры
1/2 3 =0,125 - 3 значащие цифры
1/2 39 и далее = ... - 39+ значащих цифр, более 38 цифр в Number-е не отразишь, приехали :)

так их и в Double не отразишь :)

Число 2 130 = 1024 13 > 1000 13 = 10 39 имеет более 39 значащих цифр и не может быть представлено в Number. В двоичном представлении оно имеет только 1 значащую цифру, и поэтому должно представляться в Double точно.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479752
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adukadbpatchпропущено...


так их и в Double не отразишь :)

Число 2 130 = 1024 13 > 1000 13 = 10 39 имеет более 39 значащих цифр и не может быть представлено в Number. В двоичном представлении оно имеет только 1 значащую цифру, и поэтому должно представляться в Double точно.

ок, уделал, мое почтение!

прикольно осознавать, что ты (в смысле я) сел в лужу. верификацию double vs number мы делали для финансовых данных почти лет двадцать назад (там больше 1000 триллионов величины не имеют практического смысла, если ты не в Зимбабве)

на астрономические величины проверить тогда как-то не подумалось, каюсь
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39479766
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adukaЧисло 2 130 = 1024 13 > 1000 13 = 10 39 имеет более 39 значащих цифр и не может быть представлено в Number.Не может храниться в NUMBER(38). Безразмерный NUMBER может быть до 40 значащих цифр:
Код: plsql
1.
2.
DUMP(TO_CHAR(POWER(2,130)))
Typ=1 Len=40: 49,51,54,49,49,50,57,52,54,55,54,56,51,55,53,51,56,53,51,56,53,51,52,57,56,52,50,57,55,50,55,48,55,50,56,52,53,56,50,52
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480004
aduka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aduka
Число 2 130 = 1024 13 > 1000 13 = 10 39 имеет более 39 значащих цифр и не может быть представлено в Number. В двоичном представлении оно имеет только 1 значащую цифру, и поэтому должно представляться в Double точно.

dbpatch, нет, это я ошибся. Это утверждение верно только теоретически. Решил проверить его на практике, и оказалось, что число 2 56 в Double сохраняется точно, а вот число 2 57 округляется (144115188075855870 вместо 144115188075855872). Вот такая засада с Double.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480017
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adukaadukaЧисло 2 130 = 1024 13 > 1000 13 = 10 39 имеет более 39 значащих цифр и не может быть представлено в Number. В двоичном представлении оно имеет только 1 значащую цифру, и поэтому должно представляться в Double точно.

dbpatch, нет, это я ошибся. Это утверждение верно только теоретически. Решил проверить его на практике, и оказалось, что число 2 56 в Double сохраняется точно, а вот число 2 57 округляется (144115188075855870 вместо 144115188075855872). Вот такая засада с Double.

не важно, в любом случае мантисса в double может быть больше, чем в number, т.е. уже есть класс чисел, которые нельзя сконвертировать
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480058
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, все самое интересное пропустил.
Вот пример без "астрономии" (double):
3FBF9ADD3746F67D=0,12345678901234609370352046653351862914860248565673828125
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480062
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousБлин, все самое интересное пропустил.
Вот пример без "астрономии" (double):
3FBF9ADD3746F67D=

0,12345678901234609370352046653351862914860248565673828125

диаметр Млечного Пути примерно

946073047258080000000000 миллиметров


если вон то число взять как угол в радианах, да в последнюю пятерку заменить на 6, какое уголовое отконение даст это в масштабах нашей Галактики (берем катеты равными диаметру Галактики, насколько изменится гипотенуза?)
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480065
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchесли вон то число взять как угол в радианах, да в последнюю пятерку заменить на 6, какое уголовое отконение даст это в масштабах нашей Галактики (берем катеты равными диаметру Галактики, насколько изменится гипотенуза?)
Угловое - 1e-56 радиана
Гипотенуза - прирастет примерно на 9,4607304725808E-23 мм, а что?
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480072
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousdbpatchесли вон то число взять как угол в радианах, да в последнюю пятерку заменить на 6, какое уголовое отконение даст это в масштабах нашей Галактики (берем катеты равными диаметру Галактики, насколько изменится гипотенуза?)
Угловое - 1e-56 радиана
Гипотенуза - прирастет примерно на 9,4607304725808E-23 мм, а что?

а, ну да, 9.5E-23 мм на масштабе Галактики - это нет, не астрономическая величина, конечно же нет :)
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480073
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchа, ну да, 9.5E-23 мм на масштабе Галактики - это нет, не астрономическая величина, конечно же нет :)
А какое отношение 9.5E-23, которое легко представимо в number, имеет к double порядка .1 , которое нельзя точно представить в number в контексте дискуссии?
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480078
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousdbpatchа, ну да, 9.5E-23 мм на масштабе Галактики - это нет, не астрономическая величина, конечно же нет :)
А какое отношение 9.5E-23, которое легко представимо в number, имеет к double порядка .1 , которое нельзя точно представить в number в контексте дискуссии?

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

но проверить астрономические величины мы не могли (это заняло бы миллиарды триллионов лет), с тех пор я и забыл про эту особенность, в святой наивности полагая, что number это superset double (знаков-то больше влазит)

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

но моя неправота к бухгалтериям не имеет применения, так что....
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480093
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchно моя неправота к бухгалтериям не имеет применения, так что....
Если нужна управляемая точность используй BigDecimal. :)
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480203
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchandrey_anonymousпропущено...
А какое отношение 9.5E-23, которое легко представимо в number, имеет к double порядка .1 , которое нельзя точно представить в number в контексте дискуссии?

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

Вопрос с double - совсем не про "вмещается"/"не вмещается".
Применительно к бухгалтерии "стреляет" не сама ошибка представления десятичных чисел в double.


dbpatchоказалось что не прав в части астрономической величины мантиссы и вот похоже да, каких-то немыслимо мелких дробных, за что уже три раза покаялся.
.1<= x <=.2 - это "немыслимо мелкое"?
Ну-ну.

...что до бухгалтерий - вопрос не в double, вопрос в квалификации программистов, этот double использующих.
На самом деле можно, но с велосипедом.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480227
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньевdbpatchно моя неправота к бухгалтериям не имеет применения, так что....
Если нужна управляемая точность используй BigDecimal. :)

решение довольно "упоротое", если честно.

я сам больше склоняюсь (в теории) к варианту fixed pointer, от int64 (или int128), где соглашение весьма просто
- integer задает число копеек (или десятитысячных копеек, в случае цены).

библиотека для финансовых вычислений (на том-же C++) делается на 1-2-3, скорость наибольшая

на практике же так и используется который год тот самый double с поправкой округлений на операциях умножить и разделить
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480234
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchя сам больше склоняюсь (в теории) к варианту fixed pointer, от int64 (или int128), где соглашение весьма просто
- integer задает число копеек (или десятитысячных копеек, в случае цены).
В IEEE-754-2008 появился decimal.
Скоро во всех утюгах планеты!
:)
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480378
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousdbpatchя сам больше склоняюсь (в теории) к варианту fixed pointer, от int64 (или int128), где соглашение весьма просто
- integer задает число копеек (или десятитысячных копеек, в случае цены).
В IEEE-754-2008 появился decimal.
Скоро во всех утюгах планеты!
:)

это вот этот который? https://en.wikipedia.org/wiki/Decimal_floating_point
не взлетит. его даже к GNU C толком привинтить не смогли (в документации есть, по факту просто так скомпилировать не получится).

кроме того, нативная реализация там только лишь на некоторых IBM pSeries, zSeries (не только лишь не все), в остальных случаях натужная софтовая реализация аля Number (который, впрочем, аппаратно могут тоже, не только лишь не все).

в этом варианте правильно считать финансы в Integer-ах как копейки выглядит перспективнее, осталось только нативного int128 дождаться (в x64 там все мрачно, через два 64-х битных числа все сделано на ассемблере)
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480421
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchэто вот этот который? https://en.wikipedia.org/wiki/Decimal_floating_point
не взлетит. его даже к GNU C толком привинтить не смогли (в документации есть, по факту просто так скомпилировать не получится).
https://software.intel.com/en-us/cpp-compiler-18.0-developer-guide-and-reference-intel-extensions-qintel-extensions
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480447
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousdbpatchэто вот этот который? https://en.wikipedia.org/wiki/Decimal_floating_point
не взлетит. его даже к GNU C толком привинтить не смогли (в документации есть, по факту просто так скомпилировать не получится).
https://software.intel.com/en-us/cpp-compiler-18.0-developer-guide-and-reference-intel-extensions-qintel-extensions

ерунда это все, аппаратной поддержки нет, они лишь подключают софтварную библиотеку
https://software.intel.com/en-us/articles/intel-decimal-floating-point-math-library

по поводу поддержки этого Decimal и вовсе анекдот - в clang задавали вопрос, нужен ли он. никто за годы ни разу не обратился за поддержкой
http://releases.llvm.org/3.8.1/tools/docs/UsersManual.html#gcc-extensions-not-implemented-yet

а в gcc его похоже IBM самолично впливала, ей зачем-то было нужно, так этим практически никто похоже не пользуется

так что насчет всех пылесосов я бы не зарекался :)
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480449
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchаппаратной поддержки нет, они лишь подключают софтварную библиотеку
Как только интел разродится железякой - так сразу и появится во всех утюгах.
Подозреваю, что дело вообще может ограничиться микрокодом.
А случится это, как только интел увидит возможность поднять денег на массовой адаптации бухгалтерского ПО под decimal :)
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480465
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousdbpatchаппаратной поддержки нет, они лишь подключают софтварную библиотеку
Как только интел разродится железякой - так сразу и появится во всех утюгах.
Подозреваю, что дело вообще может ограничиться микрокодом.
А случится это, как только интел увидит возможность поднять денег на массовой адаптации бухгалтерского ПО под decimal :)
микрокодом там точно не ограничится, не тот уровень (банально - слишком много кода, хотя они могут реализовать лишь базовые +-*/, всякие аркатангенсы навечно оставить в софте)

а реализовывать все в кремне аля x87 - бесцельное удорожание и прочий рост тепловыделений
да и старые процессоры куда девать? в общем мертворожденное это все, яж говорю - не взлетит.

кроме того, никто из девелоперов не хочет это использовать - 95% оных не читало даже https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

только только научились кое-как копейки в double считать, и тут опять переучиваться?

да, ссылку выше даже я не прочитал, не дочитал и до пятой части, забросил, слишком скучно и непонятно для "бухгалтера"
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480474
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchа реализовывать все в кремне аля x87 - бесцельное удорожание и прочий рост тепловыделений
На минуточку x87 годы назад тупо перебрался под общую крышку с CPU, потому для просто поддержки формата и расчетов с ним все что надо - добавить десятичный порядок.
Куда старые процессоры девать?
Да как обычно - на помойку, уж сколько поколений сменилось - и то лишь в случае, если современные FPU не позволяет решить задачу работы с десятичным порядком на уровне микрокода... Те же P6/P7 ведь микрокодом обошлись, не?
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480484
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousdbpatchа реализовывать все в кремне аля x87 - бесцельное удорожание и прочий рост тепловыделений
На минуточку x87 годы назад тупо перебрался под общую крышку с CPU, потому для просто поддержки формата и расчетов с ним все что надо - добавить десятичный порядок.
Куда старые процессоры девать?
Да как обычно - на помойку, уж сколько поколений сменилось - и то лишь в случае, если современные FPU не позволяет решить задачу работы с десятичным порядком на уровне микрокода... Те же P6/P7 ведь микрокодом обошлись, не?

P7 как говорит википедия - это Итаник. но если речь про P6 + Netburst то они померли естественным путем в связи с массовым переходом на x64

даже при всех очевидных бенефитах x64 для сервера - процесс помирания был очень долгим, растянулся на лет так 14 минимум и до сих пор еще не закончился (RHEL 5/6 x32 все еще саппортится)


в остальном же все печально - линкеры по дефолту компилируют в очень ограниченный сабсет x64 команд (хотя нужно отдать должное, туда по умолчанию много чего включено, тот-же SSE2), а вот всякие новые фишки вроде AVX или CRC (_mm_crc32_u64 интринзик) - это лишь удел отдельно взятых функций, которые на старте проверяют поколение процессора и подсовывают или себя или софтовый "универсальный" аналог

а теперь представь себе ситуацию с базовым числовым типом - как это будет выглядеть? всякие инлайнинги отпадают как класс (ты не заменишь их на старте), т.е. только прыжки в библиотеки даже для суммирования, а это опять ТООООРМОЗА, в сравнении.

кому это вообще будет надо? т.е. в массы это все никак не пойдет.

а микрокод процессора не умеет прыгать сам в userspace библиотеки, там или всё, или ничего
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480487
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchа теперь представь себе ситуацию с базовым числовым типом - как это будет выглядеть?
Да так и будет - одна сборка для ущербных, другая - для "продвинутых".
Ведь сегодня никого не удивляет 5-6 сборок любого современного продукта под различные платформы, верно?
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480492
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousdbpatchа теперь представь себе ситуацию с базовым числовым типом - как это будет выглядеть?
Да так и будет - одна сборка для ущербных, другая - для "продвинутых".
Ведь сегодня никого не удивляет 5-6 сборок любого современного продукта под различные платформы, верно?

под платформы - пока не удивляет, хотя тенденция на тотальную замену всех этих монстров из 90-х и 00-х на x64 она вовсю шурует по планете (терабайты оперативки на x64 уже никого не удивляют, кому еще нужны эти big-endian - загадка, вон даже линукс окончательно оказывается от поддержки big-endian power)

но decimal number - это не тот случай, чтоб под него отдельную сборку делать

для разработчика это двойной pain - мало просто собрать, этож еще и тесты надо отдельно прогнать, а оно ему надо?
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480499
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchдля разработчика это двойной pain - мало просто собрать, этож еще и тесты надо отдельно прогнать, а оно ему надо?
Надо конечно.
Некоторые IT-манагеры до сих пор мечтательно закатывают глаза, вспоминая, сколько распилили освоили на решении "проблемы 2000", которая яйца выеденного не стоила.
А тут вообще золотая жила из серии (для тех, кто помнит arvid и первые цифровые видеоформаты) "Прорыв года! Наконец-то фидошники научились использовать видеокассеты для хранения видеофильмов!"
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480509
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousdbpatchдля разработчика это двойной pain - мало просто собрать, этож еще и тесты надо отдельно прогнать, а оно ему надо?
Надо конечно.
Некоторые IT-манагеры до сих пор мечтательно закатывают глаза, вспоминая, сколько распилили освоили на решении "проблемы 2000", которая яйца выеденного не стоила.
А тут вообще золотая жила из серии (для тех, кто помнит arvid и первые цифровые видеоформаты) "Прорыв года! Наконец-то фидошники научились использовать видеокассеты для хранения видеофильмов!"

ой да ладно, ArVid отмер раньше, чем качественные .avi появились.

а манегеры - они вон как-то не сильно на M7 по причине нативного number переходят, так что мимо.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480514
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchой да ладно, ArVid отмер раньше, чем качественные .avi появились.

А это не важно. Важен факт: Видеокассеты. Стало. Возможно. Использовать. Для. Хранения. Видео.
754-2008: Числа. С. Плавающей. Точкой. Теперь. Можно. Использовать. Для. Десятичных. Вычислений.


dbpatchа манегеры - они вон как-то не сильно на M7 по причине нативного number переходят, так что мимо.
Это потому что маркетологи ленивые пошли.
Волна пойдет - нормально все будет.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480523
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous754-2008: Числа. С. Плавающей. Точкой. Теперь. Можно. Использовать. Для. Десятичных. Вычислений.


ты это сначала манагеру донеси, что для того, чтоб считать дебет и кредит всенепременно нужно что-то, отличное от double
если сразу не уволят "за несоотвествие" - расскажешь, чем все закончилось?
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480533
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchсначала манагеру донеси, что для того, чтоб считать дебет и кредит всенепременно нужно что-то, отличное от double
Неправильно ты, дядя Федор, бутерброд ешь.
Манагеру глубоко фиолетово на double и даже на triple.
Манагеру дай денег заработать.
А тотальная замена железа - это же золотое дно.
Кароч, когда интел расчехлится - вангую новую инкарнацию "проблемы 2000 года", что-то вроде "проблемы приблизительности точных вычислений". Эксперты статеек тиснут много новых, вендоры HW отрапортуют о новой супе-пупер-платформе, которая "считает точно", вендоры всяких аксапт срочно выпустят "advanced" версию продукта...
Индустрии давно не хватает драйва.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39480550
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousdbpatchсначала манагеру донеси, что для того, чтоб считать дебет и кредит всенепременно нужно что-то, отличное от double
Неправильно ты, дядя Федор, бутерброд ешь.
Манагеру глубоко фиолетово на double и даже на triple.
Манагеру дай денег заработать.
А тотальная замена железа - это же золотое дно.
Кароч, когда интел расчехлится - вангую новую инкарнацию "проблемы 2000 года", что-то вроде "проблемы приблизительности точных вычислений". Эксперты статеек тиснут много новых, вендоры HW отрапортуют о новой супе-пупер-платформе, которая "считает точно", вендоры всяких аксапт срочно выпустят "advanced" версию продукта...
Индустрии давно не хватает драйва.

так уже тискали, толку с того?

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

а пояснить "нам нужен новый способ что правильно копейки считать" - вызовет лишь хохот в наблюдательном совете,
типо "блин, а что, мы все эти годы как-то неправильно деньги считали? иди иди, шутка не удалась".
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39482897
adukaмолчать и слушать, молчать и слу,
1/2 4 =0,0625 - 3 значащие цифры
Нет.
Вы слишком узко смотрите.
1/2 1 +1/2 4 =0,5+0,0625=0,5625 - таки 4 значащие цифры.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39482911
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousЭто потому что маркетологи ленивые пошли.
Просто эта проблема никому не интересна. Возьмем родной интеловский формат чисел с плавающей запятой (80 бит). Аппаратно реализован, точнее. Но на него все забили практически с рождения. Потому как привычка.
...
Рейтинг: 0 / 0
вы думаете что 1+(-1) = 0? а вот и нет
    #39483213
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев...родной интеловский формат чисел с плавающей запятой (80 бит).
Это все тот же склоняемый здесь IEEE-754.
Кому надо - пользуется.
...
Рейтинг: 0 / 0
76 сообщений из 76, показаны все 4 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / вы думаете что 1+(-1) = 0? а вот и нет
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]