|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
booby Даже в такую фигню, как "вызов функции умножения всегда дает тот же результат" применительно к волшебным binary double Впрочем, я помню, что в вашей вселенной booby даже исходный x сам с собой на равенство/неравенство не вполне корректно сравнивать... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2022, 17:11 |
|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
упсссс... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2022, 17:54 |
|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
Иван FXS booby Для этого у Access есть тип Numeric, точно соответствующий формату внутреннего представления таких чисел В вашем тоже есть, только вы, может быть, не знаете, как его указать в визуальном интерфейсе. Если при создании поля в конструкторе таблицы выбрать тип поля "числовой" и размер поля "двойное с плавающей точкой" - то то, что получится в итоге - будет полем фиксированного размера с типом binary_double А если в типе поля указать "числовой", а в размере сказать "действительное", то ему можно задавать "точность" вплоть до 28, и тогда то, что получится, будет Numeric полем. Проблема с ним только в том, что при любом способе его задания, вы не сможете хранить в нем результат произвольного decimal вычисления. Только в рамках попадания в (точность, шкала). Либо дробные хвосты обрежутся по шкале, либо значение не влезет в указанную точность. Но если для вас достоверно значима только целая часть, то (28,0) позволит вам получить дополнительные разряды точного представления целого числа. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2022, 17:55 |
|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
booby, в конструкторе таблиц вижу, да. Но я "пляшу" от кода (то есть VBA). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2022, 18:03 |
|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
Иван FXS ....Вы не знаете (и не можете знать), что я делаю (и что мне нужно)... Очень сожалею что ввязался-весь топик напоминает:"а брошу ка я им кость-посмотрим что будет" при полном отсутствии желания что-то узнать или чему-то научиться ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2022, 18:32 |
|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
Иван FXS ....Вы не знаете (и не можете знать), что я делаю (и что мне нужно)... Очень сожалею что ввязался-весь топик напоминает:"а брошу ка я им кость-посмотрим что будет" при полном отсутствии желания что-то узнать, чему-то научиться, изменить свое мнение, если оно ошибочно ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2022, 18:42 |
|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
sdku помогите/как создать генератор случайных чисел с разрядностью * эти числа будут участвовать в вычислениях/будут использованы в качестве идентификатора (Вообще-то топик был, давно, полтора года назад: https://www.sql.ru/forum/1329007-1/kak-povysit-moshhnost-rnd-s-single-do-double . Лично для меня тема "многомерного" Монте-Карло -- в 100-мерном пространстве "разыгрываемых" параметров, например, -- так и продолжается...) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2022, 18:45 |
|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
sdku, а этот пост бы написан совершенно не про Монте-Карло и даже не про ДСЧ. И, в общем, я разобрался, почему Debug.Print x не выдаёт точное значение числа (что ему мешает это сделать). Ну а дальше -- слово за слово -- мне начали объяснять, что нельзя индексировать поле с плавающей точкой (хотя, конечно, можно) и прочее. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2022, 18:53 |
|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
Иван FXS booby, в конструкторе таблиц вижу, да. Но я "пляшу" от кода (то есть VBA). Не знаю, какая у вас проблема. в коде вы вообще можете сделать, все, что вам угодно, в пределах поддерживаемого синтаксиса. Посмотрите, какие поля получаются, например, вот так: Код: vbnet 1.
просто number создастся как binary_double, а p1 и p2 как "действительные" . с просто указанием numeric/decimal есть одна проблема - оно тогда создается как numeric(18,0) Хотя надо учесть что с ними были ранее проблемы ( районе access 2000-2003) с сортировкий и выгрузкой в текстовый формат. Насчет varbinary(28) в общем это перехлест, в любом случае должно хватать и 17 байт для хранения любого значения, вычисленного в cdec-арифметике. Дальше весь вопрос в том - нужны ли они вам именно как числа при манипуляции с записями в таблице бд. PS В некоторых других системах указание Numeric без указания точности и шкалы, приводит к тому, что можно записывать вообще любое вычислимое в типе значение, но ms access в этом месте ведет себя иначе. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2022, 19:23 |
|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
booby, "... Create table bb_tbl(...)" -- это вы называете "в коде"? Это в коде, конечно, в том смысле, что это создание таблицы в коде/из кода. В этом кейсе я использовал таблицу только для того, чтобы сохранить в ней 40 миллионов (как оказалось, а могло быть и 100 миллионов) значений датчика "случайных" чисел (ну и сверяться с ними -- делать .seek "=", x -- на основе индекса). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2022, 19:29 |
|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
Иван FXS, ладно, сорри, я совсем перестал понимал, что у вас в коде, а что только для того, чтобы 40 миллионов раз... Успехов в трудах. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2022, 19:40 |
|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
Иван FXS booby Это критически зависит от года выпуска железа -- шумящее железо? Ну-ну. А 12345678 в нём у вас всегда равно 12345678? Нет, трепет "шумящего железа", когда был, сводился, главным образов к битве между тупоконечниками и остроконечниками по вопросу о том, как правильно писать циклы. Надо ли формулировать условие завершения while i < n, разрешив программе вернуть недостоверный результат расчета суммы массива, в результате преждевременного "шумящего" перескока i через n, или правильно написать while i <> n, разрешив при таком происшествии программе впасть в бесконечный цикл, может быть, вплоть до авоста по перебору разрядности i. Тогда становится "совершенно понятно", что такой перескок несомненно был, и расчет надо запустить заново. Такой спор вряд ли может завершиться за разумное время. Касательно чисел двойной точности, примерно так история лежала, и vba самого по себе она не касается, а касается написания программ на c/c++, но все-таки это история, о которой хотя бы из любопытства можно иметь какое-то представление: В какой-то момент, если не ошибаюсь, в районе разработки pentium-5, в стандарт были внесены дополнения, касающиеся специального представления особо малых числе в районе нуля. Сопроцессорная часть этого процессора, с самого начала разрабатывалась под эти "уточнения". А дальше получилось вот что - математика для binary double всегда имела две реализации - "библиотечную" и "машинную". традиционно в компиляторах c/c++ если не использованы прагмы, выбор определялся выбором уровня оптимизации кода при компиляции. "библиотечную" часть к выходу процессора никто не правил. А способ сохранения значения регистров при вызове функции из текущего куска кода зависел от того, какая математика использовалась. Вы могли получить два равных малых значения, вычисленных в другой библиотеке, скомпилированной под использование "машинной" арифметики, затем вызвать любую функцию и затем зачем-то сравнить снова два ранее уже сравнивавшихся значения. В зависимости от того, что происходило с регистрами, содержащими эти значения - вытеснялись их предыдущие значения или нет, вы могли получить что угодно - они могли сохранить свои исходные значения, оба обнулиться или обнулиться только какой-то один из них. Оно то да, в красивой теории однажды полученное значение дальше не меняется, а в инженерной практике - как повезет в момент конкретной реализации. В те времена бубен правильной сборки программ лежал так - ты не можешь выбрать уровень оптимизации при сборке большого проекта меньше, чем максимальный предполагаемый среди всех используемых в проекте библиотек. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2022, 20:29 |
|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
booby, честно, понять, почему и как "однажды полученное значение дальше поменяться" может, если никто и ничто ничего с ним не делает, -- выше моего дилетантского разумения. И даже понять, как оно может поменяться при перекладывании из одной ячейки (области) памяти в другую (без преобразования типа) -- тоже. Это же просто биты на нижнем машинном уровне. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2022, 20:55 |
|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
Иван FXS booby, честно, понять, почему и как "однажды полученное значение дальше поменяться" может, если никто и ничто ничего с ним не делает, -- выше моего дилетантского разумения. И даже понять, как оно может поменяться при перекладывании из одной ячейки (области) памяти в другую (без преобразования типа) -- тоже. Это же просто биты на нижнем машинном уровне. где-то оно может и "просто биты", но не в числах двойной точности. "просто биты" - не имеют типа, и, в этом смысле, сами по себе не являются значением . Если код, сохраняющий значение регистра заранее знает, что оно несомненно типизировано, и представляет собой ни что иное как число двойной точности, то "старый" код относится к определенным битам в представлении, говорящим "я сейчас представляю особо малое число", именно как к мусору, появившемуся, например, в результате шума, недопустимому вообще в представлении значения такого типа. А дальше... дальше стандарт много чего предполагает, но этим почти всегда не располагают писатели на большинстве языков, а там, где могут влиять, полагаются на поведение по умолчанию. В этом месте допустимо разное поведение - от выброса ошибки "ой мне тут грязь в регистре вместо значения подсунули", до просто тихой очистки значения в ноль. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2022, 21:15 |
|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
booby, "очистка значения в ноль" или оставление в нём чего-то там -- это полюбасу часть вычисления (нового значения). А по завершении вычисления зачем с ХРАНЯЩИМСЯ значением что-то делать? И даже при присвоении значения одной переменной (типа Double) другой переменной (типа Double) -- вы ожидает каких-то проверок, а не просто Move? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2022, 21:28 |
|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
booby в стандарт были внесены дополнения, касающиеся специального представления особо малых числе в районе нуля -- кстати, что это за числа -- они с (отрицательным) значением (десятичного) порядка меньше стандартного для типа Double (который -324)? Экзотично, конечно, но тогда можно и "особо крупные" значения ввести в оборот -- со значениями (десятичного) порядка больше +308... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2022, 21:42 |
|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
Иван FXS, 8-байтный double и на 16 и на 32 разрядной машине занимает более одного регистра. вот 32 разрядная машина, занято два регистра, а вам нужен сейчас, допустим, всего один из них для вызова дочерней функции, в кишках которой может потребоваться и второй. В общем случае, вы не можете в такой ситуации сохранять 64-битное значение, сидящее в 2х регистрах кусками, и кто-то должен сказать - "эй, это значение сломается, если освободить только один регистр". Точно можете, если точно знаете, что там значения двух независимых интов, а иначе откуда-то должна взяться уверенность в правильном сборе значения назад при возврате управления в текущий код. И да, проверка типа при присвоении несомненно происходит, весь вопрос когда. В компилируемых языках - на этапе компиляции, в интерпретируемых на этапе фактического присвоения. В норме, кстати это не может происходить с помощью Move - move связан с передачей владения значением. Присвоение значений простых типов всегда осуществляется копированием. Правильность работы обеспечена там (например в vba), где существует принудительная инициализация значения объявленной типизированной переменной значением по умолчанию из множества допустимых для типа. В прочих случаях, в языках где допускается существование переменных с не полностью сформированным значением , ответственность падает на программиста в виде "неопределенного поведения". ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2022, 21:51 |
|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
Иван FXS booby в стандарт были внесены дополнения, касающиеся специального представления особо малых числе в районе нуля -- кстати, что это за числа -- они с (отрицательным) значением (десятичного) порядка меньше стандартного для типа Double (который -324)? Экзотично, конечно, но тогда можно и "особо крупные" значения ввести в оборот -- со значениями (десятичного) порядка больше +308... субнормальные числа. И, с версией сопроцессора я ошибся, это был еще 8087 https://ru.wikipedia.org/wiki/Денормализованные_числа ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2022, 21:57 |
|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
booby, ну, хорошо, когда повстречаюсь с тем, что значение типа Double при присвоении из одной переменной типа Double в другую переменную типа Double -- перестало быть равным само себе... обязательно вам об этом сообщу. Типа: Код: vbnet 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2022, 22:22 |
|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
Иван FXS booby, ну, хорошо, когда повстречаюсь с тем, что значение типа Double при присвоении из одной переменной типа Double в другую переменную типа Double -- перестало быть равным само себе... обязательно вам об этом сообщу. Типа: Код: vbnet 1. 2. 3. 4.
Не равно самому себе, это когда a <> a ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2022, 22:35 |
|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
booby, a <> a -- это значение переменной не равно само себе. А то, что я написал, это само значение не равно самому себе, безотносительно переменной, в которой оно лежит. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2022, 22:44 |
|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
В полной мере vba не даст вам насладиться этой этой темой, но на коротке, путем подглядывания в содержимое переменных на панели locals, можно, например, так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2022, 23:00 |
|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
booby, вы продемонстрировали, что значение типа Double может быть таким, что для него не будут (правильно) выполняться элементарные арифметические операции. Прикольно, да. Но я обсуждал не операции (со значениями), а равенство значений самим себе. И его, равенства, сохранение во времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 00:47 |
|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
Собственно классическая история про этот тип выглядит так: запустить в пошаговом режиме test_double_calc и наблюдать за происходящим: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Множество прочих историй либо стухли по мере смены поколений железа, либо замены библиотек, а какие-то из них у себя к проявлению Vba никогда не позволял, предпочитая стратегию с выбросом ошибки в определенных моментах. Код в предыдущем посте получился с дефектом, не влияющим на фактическое поведение, но вот замена с добавлением пары фрагментов. он, конечно, хрупкий, благодаря "особой безопасности" vba, но в самый общий курс дела приблизительно вводит. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 00:49 |
|
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
|
|||
---|---|---|---|
#18+
Иван FXS, для NaN по стандарту не существует понятия равенства самому себе. Но это нельзя показать в Vba Он настроен на то, что при обращении с ним без "хакерства", NaN не может быть получен ни при каких обстоятельствах. У вас там точно все без "хакерства"? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2022, 00:53 |
|
|
start [/forum/topic.php?fid=45&msg=40126902&tid=1609490]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
154ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 253ms |
total: | 512ms |
0 / 0 |