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

"вообще говоря, понятия равенства самому себе значений типа Double не существует, потому что для некоторых значений типа Double его не точно существует"
?

Потому что если для некоторых А не существует Б, то это именно так и должно формулироваться:

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

кстати, если к первому вашему примеру добавить любую из строчек
Код: vbnet
1.
2.
3.
  If a = a Then Debug.Print "NaN = NaN"
  If a <> a Then Debug.Print "NaN <> NaN"
  Let booooolean = (a = a) 

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

Ну, хорошо, буду знать. Куда это меня продвигает? Это же речь о том, что VBA позволяет хранить в Double сущность (сущности?), которая не является числом. Ну, позволяет, ладно.

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


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Function foo2(ByVal v As Double) As Double
  Dim y As Double
  y = v * v
  foo2 = y / 1E+308
End Function


Sub test_dbl_calc2()
  Dim x As Double, y As Double
  ' прямое вычисление, работает, благодаря внутреннему уму вычислятеля выражений
  x = 1E+308
  y = (x * x) / x
  Debug.Print y
  
  Dim z As Double
' считаем через функцию и получаем ошибку времени выполнения
  z = foo2(x)
  Debug.Print x, y, z, x = y, x = z, y = z
End Sub

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

Это же речь о том, что VBA позволяет хранить в Double сущность (сущности?), которая не является числом. Ну, позволяет, ладно.

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

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

"вообще говоря, понятия равенства самому себе значений типа Double не существует, потому что для некоторых значений типа Double его не точно существует"
?

Нет
Дело принципиально совсем в другом.
Вы беретесь за такой тип, в котором история как библиотечной, так машинной реализации которой много раз менялась.
Причем для целей, для которых, как кажется, выбранный вами тип случаен по существу.
У него не просто длинная история, а такая длинная, которая много длинней истории самого стандарта.
И в этой истории в разные времена были разные особенности.
Со временем она как-то меняется, а vba по по своему еще и защищает от некоторых ее особенностей.

Смысл всех рассказов состоит вот в чем - если цель вашего использования чисел двоичной точности по сути случайна к его
родным по исходному назначению собственным задачам и целям - не трогайте его.

В истории любые ваши предположения о нем как о "нормальном типе", на определенных отрезках не оправдывались.
Начиная с транзитивности, если a = b и b = c, то a = c, через сравнение с самим собой, и заканчивая чудесами с сохранением навсегда однажды полученного значения.

Это сложный тип, со сложной историей.
Благоразумней не трогать его, чем отстаивать любые абстрактные идеи, касающиеся того,
каким должен, а каким не может быть правильный тип, предназначенный для использования в компьютерах.
...
Рейтинг: 0 / 0
MS Access отображает значения Double (Двойное с плав. точкой) не полностью?
    #40126982
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
выбранный вами тип случаен по существу
вообще не понимаю этого утверждения. Я просто всегда применял его для вычислений с вещественными (они же действительные, они же real по-английски) числами. Начиная с REAL*8 в Фортране 40 лет назад. И совершенно не понятно, что вы хотите (можете) предложить мне взамен.

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


нет проблем распечатать целиком:

Код: 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.
#If VBA7 Then
  Private Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As LongPtr)
#Else
  Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
#End If

Type t8byte
 a(7) As Byte
End Type

Sub print_double_hex(ByVal x As Double)
  Dim i&, t As t8byte

  CopyMemory t, x, 8

  Debug.Print "Hx";
  For i = 7 To 0 Step -1
    Debug.Print Hex(t.a(i));
  Next
  Debug.Print

End Sub

Sub test_print()
  Dim a As Double

  a = 1 / 3
  print_double_hex a

End Sub

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


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