powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
25 сообщений из 84, страница 2 из 4
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126825
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
booby
точно не путаю.
а я думаю, что путаете.


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

ЗЫ
Если вам "посередине" на самом деле нужна действительная арифметика удвоенной точности, не используйте хотя бы на этапе хранения вычисленных значений этот формат.
Уходите на восьмибайтные структуры двоичного хранения.
Применительно к Access это значит - храните полученные значения в полях binary(8).
Жизнь существенно упростится.
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126826
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
впрочем, у конкретного значения типа Double можно определить (вычислить) сколько угодно цифр его записи в десятичной нотации...

Умнее было было бы перестать писать совсем уж откровенный бред.
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126827
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku, не понял, какой именно термин в вашей реплике представляет тип Double (в VB)...
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126828
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS,

Посмотри свои две первые картинки...
Если ты оперируешь в голове яблоками, то оперируй только яблоками и всё будет хорошо...
Допустим ты положил в мусорное ведро яблоко не глядя...
Пока ты кроме яблок ничего не замечаешь - всё норм, одно яблоко положил - одно и лежит, вытащил его - тоже норм, - нет в ведре яблок...
А ты что делаешь?
Положил не глядя, потом достал яблоко из мусорного ведра и опа такой - а х.ле в ведре мусор лежит ???
Типа яблоко нагадило...
По идее, если оперируешь чисто яблоками, то мусор
-3.33....E-16 на самом деле равный 0,000000000000000333 не должен тебя особо напрягать (достаточная инженерная точность как писали ниже), если тебя это все таки напрягает - не выноси никому мозк и в первую очередь самому себе...
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126829
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
тогда вот здесь, наверно, был другой Иван, или тот, что есть сейчас, уже все забыл - и почему после двойного преобразования двоичное представление меняется, и почему непосредственно сравнивать такие числа - не самая умная идея:
Задачка

кто старое:
booby
даже исходный x сам с собой на равенство/неравенство не вполне корректно сравнивать..
помянет, тому глаз вон.
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126833
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS,
Из HELPа: "Тип данных double – 64-разрядная переменная с плавающей запятой."
Думаю,это сугубо моё личное мнение,не стоит слишком глубоко(достаточно базовых знаний-это обязательно) вникать в суть того,что не понадобится,а вот если понадобится-тогда и изучите
Поле двойной точности с плавающей запятой в качестве ключевого-здесь более интересно не что такое поле с плавающей запятой и как оно отображается,а как можно додуматься до использования его в качестве ключа
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126834
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku, могу только повторить: я искал коллизии в самопальном ДСЧ. И для этого складывал его результаты в таблицу. А чтобы быстрее проверять* новые результаты на совпадение со старыми -- приндексировал эту таблицу по этому (единственному, на самом деле) её полю.

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

________________
* = на самом деле, просто проверять, слово "быстрее" тут лишнее
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126838
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
...Я просто нажал в конструкторе кнопку с ключиком, чтобы создать индекс с уникальными значениями.

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

Правильная работа ключа целиком основана на наличии точных правил, позволяющих надежно сравнивать значения,
как минимум, на равенство/неравенство.
Менее важно, но используется для сортировки предположение о надежности сравнения на меньше.
Здесь вы добровольно объявляете ключом поле с заведомо ненадежными правилами сравнения.
Маловероятно, что это может вас устроить.

И, это вы уже проходили , независимо от того, чей глаз от этого должен выкатиться.
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126847
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
Здесь вы добровольно объявляете ключом поле с заведомо ненадежными правилами сравнения.
могу только повторить, что значения типа Double имеют абсолютно надежные правила сравнения -- как на равенство, так и на больше-меньше. Уверяю вас, индексация по полю "Двойное с плавающей точкой" работает исчерпывающе полнофункционально. (Иначе как бы она вообще могла присутствовать в функционале MS Access!)

PS. Ещё раз, если два значения типа Double (или "Двойное с плавающей точкой" в таблице) равны, то они будут оставаться равными всегда. А если не равны, то будут оставаться неравными.
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126852
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
....
значения типа Double имеют абсолютно надежные правила сравнения
....
PS. Ещё раз, если два значения типа Double (или "Двойное с плавающей точкой" в таблице) равны, то они будут оставаться равными всегда....
Кратко,точно,безапеляционно.
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126854
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
могу только повторить, что значения типа Double имеют абсолютно надежные правила сравнения

смотря какая точность.
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126856
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku,

покажите код, в котором два значения типа Double, оставаясь каждое неизменным, то равны, то не равны друг другу.
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126857
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
тогда вот здесь, наверно, был другой Иван, или тот, что есть сейчас, уже все забыл - и почему после двойного преобразования двоичное представление меняется, и почему непосредственно сравнивать такие числа - не самая умная идея:
Задачка

ТС клинит.
Ему же объяснили он опять "за рыбу деньги"
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126858
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROI
смотря какая точность.
а "какая точность" у кода
Код: vbnet
1.
2.
3.
4.
5.
Dim x1 as Double, x2 as Double
.....
If x1 = x2 Then MsgBox "x1 = x2"
If x1 < x2 Then MsgBox "x1 < x2"
If x1 > x2 Then MsgBox "x1 > x2"


?
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126872
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
sdku,
покажите код, в котором два значения типа Double, оставаясь каждое неизменным, то равны, то не равны друг другу.
отвечу так: до 8 байт (речь о 8 байтах потому что это тип дубль-зачем он при меньших размерах) все будет нормально,а потом начнутся "непонятки"-но если Вы не работаете с огромными числами(значениями) то ЗАНАХРЕНА Вам этот тип???? Ведь можно и микроскопом гвоздь забить,только не для этого он....
Может объясните ЗАЧЕМ Вам этот тип-уж очень интересно (сегодня это не так актуально,но лет 40 назад,если это не есть объективная необходимость, за такое расточительное отношение к ресурсам Вас бы к компьютеру близко не подпустили)
Иван FXS
sdku, могу только повторить: я искал коллизии в самопальном ДСЧ. И для этого складывал его результаты в таблицу. А чтобы быстрее проверять* новые результаты на совпадение со старыми -- приндексировал эту таблицу по этому (единственному, на самом деле) её полю...
Кроме как бестолковым баловством на уровне детсада назвать это нельзя.А еще посмотрите это 8116809
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126873
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS,

Уникум... за один топик счетчик уже 20-ку накрутил...


YouTube Video
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126876
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku
если Вы не работаете с огромными числами(значениями) то ЗАНАХРЕНА Вам этот тип????

-- какие огромные числа? У ДСЧ результат вообще [0;1).

В смысле "ЗАНАХРЕНА этот тип"? А какой использовать -- Single, что ли? Типа, экономить 4 байта на переменную? О чём вообще спич? Ну, Currency ... не понимаю, нафига он мне? В том ДСЧ, про который я сейчас говорю, вообще Decimal ( целочисленный !) внутри.

Код: vbnet
1.
2.
3.
Let myRnd2022_A = CDec("44485709377909") '44485709377909# '=C*0.1580449882180410270393622341
Let myRnd2022_B = CDec("11863279") '11863279 '=C*0.0000000421468335787267278647
Let myRnd2022_C = CDec(2# ^ 48)  '=281 474 976 710 656



Вы не знаете (и не можете знать), что я делаю (и что мне нужно), но как-то с гонором начинаете поучать.
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126877
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
booby
Здесь вы добровольно объявляете ключом поле с заведомо ненадежными правилами сравнения.
могу только повторить, что значения типа Double имеют абсолютно надежные правила сравнения -- как на равенство, так и на больше-меньше. Уверяю вас, индексация по полю "Двойное с плавающей точкой" работает исчерпывающе полнофункционально. (Иначе как бы она вообще могла присутствовать в функционале MS Access!)


1) за логикой своих высказываний все-таки лучше следить.
Иначе может оказаться, что в истинные они обращаются только при ложности посылок.
Для того чтобы индексация работала, необходим сам факт наличия правил сравнения, а термин "надежные",
по крайней мере, в использованном вами смысле, требует уточнения.

2) кое-что, похоже вы забыли. Попробую напомнить:
2.а) Стандарт предполагает наличие двух нулей - положительного и отрицательного.
У них разные двоичные представления, но для vba несомненно, думаю, что и для Access как субд тоже, они всегда точно равны.
По крайней мере, полученный однажды в индексе отрицательный ноль не даст там появиться второму положительному.
Существенно это для вашего случая или нет - издалека неведомо.
2.б) VBA тщательно оберегает вас от получения NAN в качестве результата вычисления простого выражения сорта sqr(-1)
Однако из этого не следует, что он точно и несомненно не сможет у вас приключиться в вашем не показанном вычислении.
Я не знаю, что с этим делает Access - запишет он NaN в таблицу или откажет.
Но, если вдруг запишет, то ключ немедленно превратится в тыкву, поскольку NaN ничему не равен, в том числе самому себе.
Один раз попавший в уникальный индекс NaN обязан попадать туда произвольное количество раз.

Дальнейшее к ключу, само по себе не относится, но...
с) По отношению к "надежному" сравнению, что бы это ни значило, обычно "естественно" предполагают применимость правила транзитивности.
То есть, если a = b И b = c ТО несомненно a = c
На чем строится ваша уверенность, что транзитивность вообще применима к действительным числам двойной точности.
d) Следующее "естественное" предположение, что из a = b несомненно следует, что 1000*a = 1000*b
Вот это не обеспечивалось исторически ни первоначальными формулировками стандарта ни первоначальными фактическими реализациями.
e) умножение действительных чисел двойной точности, в общем случае, некоммутативно:
a*b и b*a не обязаны давать один и тот же двоичный результат.

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

Удачи в борьбе с отображением значений действительных чисел.
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126878
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
То есть, если a = b И b = c ТО несомненно a = c
На чем строится ваша уверенность, что транзитивность вообще применима к действительным числам двойной точности.
код, в котором она не выполняется -- на стол.

booby
d) Следующее "естественное" предположение, что из a = b несомненно следует, что 1000*a = 1000*b
Вот это не обеспечивалось исторически ни первоначальными формулировками стандарта ни первоначальными фактическими реализациями.
e) умножение действительных чисел двойной точности, в общем случае, некоммутативно:
a*b и b*a не обязаны давать один и тот же двоичный результат.
-- я вообще это не обсуждал, не забалтывайте простую тему:

если а равно b, то они будут равны всегда .
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126882
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
В том ДСЧ, про который я сейчас говорю, вообще Decimal ( целочисленный !) внутри.


Не надо хранить результаты вычислений, выполненных в арифметике cdec в полях binary double.
Для этого у Access есть тип Numeric, точно соответствующий формату внутреннего представления таких чисел

И вы опять ошибаетесь, целиком "целочисленные внутри" - currency, у них и арифметика целочисленная..
Наличие шкалы в decimal существенно отличает арифметику в этом типе от обычной целочисленной.
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126883
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS


если а равно b, то они будут равны всегда .


Это критически зависит от года выпуска железа, по отношению к которому вы производите столь безумное суждение.
Они, исторически, могли оказываться равными при первом сравнении и не равными при втором.
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126884
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати

booby
d) Следующее "естественное" предположение, что из a = b несомненно следует, что 1000*a = 1000*b
Вот это не обеспечивалось исторически ни первоначальными формулировками стандарта ни первоначальными фактическими реализациями.


-- обеспечивается, конечно: вызов любой стандартной математической функции (в том числе и УМНОЖИТЬ(a, b)) с одними и теми же аргументами -- что явно так в сформулированном вами примере -- даёт всегда один и тот же результат.
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126885
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
Это критически зависит от года выпуска железа


-- шумящее железо? Ну-ну. А 12345678 в нём у вас всегда равно 12345678?
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126887
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
кстати

booby
d) Следующее "естественное" предположение, что из a = b несомненно следует, что 1000*a = 1000*b
Вот это не обеспечивалось исторически ни первоначальными формулировками стандарта ни первоначальными фактическими реализациями.


-- обеспечивается, конечно: вызов любой стандартной математической функции (в том числе и УМНОЖИТЬ(a, b)) с одними и теми же аргументами -- что явно так в сформулированном вами примере -- даёт всегда один и тот же результат.

ваши домыслы, сами по себе для меня давно не интересны.
Извините.

Верить вы можете вообще во что угодно.
Даже в такую фигню, как "вызов функции умножения всегда дает тот же результат" применительно к волшебным binary double


Вероятно, даже более того, персонально вам разрешено верить и в то, что два последовательных преобразования десятичного литерала 1000 в двоичное представление тоже всегда дает один и тот же результат.
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126888
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
Не надо хранить результаты вычислений, выполненных в арифметике cdec в полях binary double.
-- спасибо, я и не храню. Результат -- "случайное" число -- вывожу в Double. Для использования по назначению.

booby
Для этого у Access есть тип Numeric, точно соответствующий формату внутреннего представления таких чисел
-- в вашем может быть и есть, а в моём нет. Так что я вообще не понимаю, что это (за ненадобностью -- как любое, чего нет ).

booby
И вы опять ошибаетесь, целиком "целочисленные внутри" - currency, у них и арифметика целочисленная..
Наличие шкалы в decimal существенно отличает арифметику в этом типе от обычной целочисленной.
-- ещё раз, у меня там целочисленный decimal, и он остаётся таковым на протяжении всех -- тривиальных -- вычислений. Что decimal бывает и не целочисленный -- я знаю, спасибо.
...
Рейтинг: 0 / 0
25 сообщений из 84, страница 2 из 4
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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