Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Забавная арифметика, честное слово ?!!!! / 11 сообщений из 11, страница 1 из 1
29.06.2004, 01:49:08
    #32580176
Alexander Say
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забавная арифметика, честное слово ?!!!!
Office2000+SP3
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
a1= 1 / 3 
a2= 1 /a1
? a3
  3  
? a3= 3 
True
? a3-fix(a3)
  0  

a1= 1 / 3 
a2= 1 /(a1+ 1 - 1 )
? a2
  3  
? a2= 3 
False
? a2-fix(a2)
  8 ,88178419700125E- 16 

Если написано 3 то это несколько не так (ну как наша пресса).

Интересно как ALL решают такие глюки ?
Жду рецептов.
...
Рейтинг: 0 / 0
29.06.2004, 02:20:29
    #32580180
Alexander G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забавная арифметика, честное слово ?!!!!
а как объявлены a1 и а2? Фокусы на преобразованиях типов давно известны.
Такие шутки можно получить, к примеру, в случаях
Dim a2
Dim a1
или
Dim a1 As Single
Dim a2 As Double

Если обе объявить одного типа - Single или Double
все будет нормально.
...
Рейтинг: 0 / 0
29.06.2004, 03:00:59
    #32580182
Alexander Say
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забавная арифметика, честное слово ?!!!!
Обе переменные имеют один тип: Double
...
Рейтинг: 0 / 0
29.06.2004, 03:17:17
    #32580183
Alexander G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забавная арифметика, честное слово ?!!!!
пробую
Dim a1 As Double
Dim a2 As Double
a1 = 1 / 3
a2 = 1 / (a1 + 1 - 1)
Debug.Print a2
Debug.Print a2 = 3
Debug.Print a2 - Fix(a2)

имею:
3
True
0

Снова:
Dim a2
Dim a1
a1 = 1 / 3
a2 = 1 / (a1 + 1 - 1)
Debug.Print a2
Debug.Print a2 = 3
Debug.Print a2 - Fix(a2)

имею
3
False
8.88178419700125E-16
...
Рейтинг: 0 / 0
29.06.2004, 03:17:57
    #32580184
Alexander G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забавная арифметика, честное слово ?!!!!
ЗЫ: A2000
...
Рейтинг: 0 / 0
29.06.2004, 06:26:05
    #32580215
Shuhard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забавная арифметика, честное слово ?!!!!
много раз обсуждаемая тема
для "плавающей" арифметики не существует точного равенства,
всилу ограничения длины мантиссы.Более того арифметика не линейна т.е. зависит от порядка действий.A+B+C!=C+A+B.

если нужны точные преобразования - то формат "денежный" + стараться избежать делений/умножений --- > влекут переполнение разрядной сетки.
...
Рейтинг: 0 / 0
29.06.2004, 06:37:04
    #32580220
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забавная арифметика, честное слово ?!!!!
Пора в ФАК выносить основы.
Чем больше действий, тем больше накапливаемая погрешность.
...
Рейтинг: 0 / 0
29.06.2004, 06:51:32
    #32580228
Shuhard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забавная арифметика, честное слово ?!!!!
ТемныйПора в ФАК выносить основы.
Чем больше действий, тем больше накапливаемая погрешность.
Ага!
при аппаратной обработке плавучки существует термин шумы "округления"
имеется мат.аппарат,распределение вероятностей и т.д.

шум - как неизбежный спутник процесса.
...
Рейтинг: 0 / 0
29.06.2004, 06:53:06
    #32580229
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забавная арифметика, честное слово ?!!!!
Вах! Как все сложно-то!
...
Рейтинг: 0 / 0
29.06.2004, 09:41:50
    #32580326
Bely
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забавная арифметика, честное слово ?!!!!
Alexander SayOffice2000+SP3
Код: plaintext
1.
? a2-fix(a2)
  8 ,88178419700125E- 16 

Если написано 3 то это несколько не так (ну как наша пресса).
Интересно как ALL решают такие глюки ?
Жду рецептов.

Хм... стандартная проблема вычисления и хранения чисел с плавающей точкой в ограниченном объеме памяти.
В качестве вечернего размышления можешь подумать как хранить иррациональное число с непериодической десятичной частью.
Например пи или e.

В качестве решения проблемы - округлять до определенного знака после запятой (второго, третьего, десятого)
...
Рейтинг: 0 / 0
29.06.2004, 10:11:37
    #32580390
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забавная арифметика, честное слово ?!!!!
ТемныйПора в ФАК выносить основы.
Чем больше действий, тем больше накапливаемая погрешность.
http://www.sql.ru/faq/faq_topic.aspx?fid=213
вопрос 19.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Забавная арифметика, честное слово ?!!!! / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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