Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Корректность цикла / 21 сообщений из 21, страница 1 из 1
07.07.2010, 08:50:07
    #36726974
1nTrO88
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корректность цикла
Добрый день всем. Я столкнулся со следующим вроде несложным вопросом( при приеме на работу).
Имеется фрагмент кода:
REAL X=1.0, E=1.0, Y=2.0
DO {
E=E/2;
Y=E+X;
}WHILE Y<>1
Вопрос:Имеет ли смысл приведенный фрагмент?С точки зрения математики я понимаю, что Y всегда будет больше 1. Реализовал на С++-, с типом double цикл все-таки останавливается через 53 шага, с float-24. Прошу объяснить эту ситуацию.Благодарю.
...
Рейтинг: 0 / 0
07.07.2010, 09:06:38
    #36726994
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корректность цикла
1nTrO88,

как вы думаете, к чему стремится последовательность

1 + 1 / 2; 1 + 1 / 4; 1 + 1 / 8; ...; 1 + 1 / 2 ^ i?

Очевидно, что к 1.

Учитывая, что у компьютера точность ограничена, то 1 / 2 ^ i станет нулем достаточно быстро (при достаточно маленьком i).
...
Рейтинг: 0 / 0
07.07.2010, 09:11:15
    #36727007
Mozok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корректность цикла
an0nym1nTrO88,

как вы думаете, к чему стремится последовательность

1 + 1 / 2; 1 + 1 / 4; 1 + 1 / 8; ...; 1 + 1 / 2 ^ i?

Очевидно, что к 1.

Все-таки к 2.
...
Рейтинг: 0 / 0
07.07.2010, 09:14:53
    #36727015
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корректность цикла
Mozok,

1 + 1 / 2 ^ 53 ~= 2 значит? Судя по вашему посту - да.
...
Рейтинг: 0 / 0
07.07.2010, 09:15:48
    #36727018
1nTrO88
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корректность цикла
О, теперь понял . Спасибо большое. !
...
Рейтинг: 0 / 0
07.07.2010, 09:21:00
    #36727025
1nTrO88
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корректность цикла
А теперь что-то опять какая-то путаница. я так понимаю эта последовательность стремится к начальному значению (2)??
...
Рейтинг: 0 / 0
07.07.2010, 10:48:31
    #36727270
Mozok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корректность цикла
an0nym,

согласен, облажался :). Действительно стремится к 1. Я с бесконечной геом. прогрессией перепутал.
...
Рейтинг: 0 / 0
07.07.2010, 11:57:23
    #36727504
Олег_Б
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корректность цикла
an0nymУчитывая, что у компьютера точность ограничена, то 1 / 2 ^ i станет нулем достаточно быстро (при достаточно маленьком i).

Не достаточно быстро. А вот 1+1/2^i достаточно быстро превратиться в 1.
...
Рейтинг: 0 / 0
07.07.2010, 12:16:15
    #36727576
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корректность цикла
Олег_Бan0nymУчитывая, что у компьютера точность ограничена, то 1 / 2 ^ i станет нулем достаточно быстро (при достаточно маленьком i).

Не достаточно быстро. А вот 1+1/2^i достаточно быстро превратиться в 1.
On a typical computer system, a 'double precision' (64-bit) binary floating-point number has a coefficient of 53 bits (one of which is implied), an exponent of 11 bits, and one sign bit.
При i = 54 уже превратится в 0.
...
Рейтинг: 0 / 0
07.07.2010, 12:40:12
    #36727670
Mozok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корректность цикла
an0nym
On a typical computer system, a 'double precision' (64-bit) binary floating-point number has a coefficient of 53 bits (one of which is implied), an exponent of 11 bits , and one sign bit.
При i = 54 уже превратится в 0.
Скорее, при i = 1024.
...
Рейтинг: 0 / 0
07.07.2010, 13:49:32
    #36727931
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корректность цикла
Mozok,

не.

1 / 2 ^ 1 = 0.5 * 10 ^ 1
1 / 2 ^ 2 = 0.25 * 10 ^ 1
1 / 2 ^ 3 = 0.125 * 10 ^ 1
...
1 / 2 ^ 53 = 0.0000000000000001 * 10 ^ 1
1 / 2 ^ 54 = 0.0000000000000000 * 10 ^ 1 = 0. Не поместилось.
...
Рейтинг: 0 / 0
07.07.2010, 14:02:46
    #36727976
Mozok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корректность цикла
an0nym,

ну вы, блин, даете...
1 / 2 ^ 54 = 1.000000000000000 * 2 -54 - все прекрасно поместилось
...
Рейтинг: 0 / 0
07.07.2010, 14:08:43
    #36727989
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корректность цикла
Mozok,

http://en.wikipedia.org/wiki/Decimal64_floating-point_format


Я, конечно, не буду утверждать, что вы не правы. Но эксперимент ТСа, описанный в конце первого поста, подтверждает мою правоту.
...
Рейтинг: 0 / 0
07.07.2010, 14:55:32
    #36728117
Mozok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корректность цикла
an0nym,

http://en.wikipedia.org/wiki/Double_precision_floating-point_format

Первый пост как раз потвеждает, что 1 + 1 / 2 54 -> 1. Это и понятно,
поскольку происходит переполнение мантиссы. Но вот насчет 1 / 2 54 -> 0 уже не так очевидно.
...
Рейтинг: 0 / 0
07.07.2010, 15:37:18
    #36728241
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корректность цикла
А, теперь понял. Согласен, вы правы.
...
Рейтинг: 0 / 0
07.07.2010, 15:39:40
    #36728249
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корректность цикла
MozokНо вот насчет 1 / 2 54 -> 0 уже не так очевидно.А у float-24 какой размер показателя степени?
...
Рейтинг: 0 / 0
07.07.2010, 16:12:19
    #36728373
Mozok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корректность цикла
miksoft,

Single precision .
24 бита мантиссы, 8 бит показателя.
...
Рейтинг: 0 / 0
07.07.2010, 16:17:23
    #36728386
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корректность цикла
Mozokmiksoft,

Single precision .
24 бита мантиссы, 8 бит показателя.Про Single precision я в курсе. А вот float-24 первый раз вижу. И, думаю, это не одно и то же.
...
Рейтинг: 0 / 0
07.07.2010, 16:33:53
    #36728442
Mozok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корректность цикла
miksoft,

вы про этот float говорите?
...
Рейтинг: 0 / 0
07.07.2010, 17:49:11
    #36728687
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корректность цикла
Mozokmiksoft,

вы про этот float говорите?Нет, сорри. Это я криво фразу топикстартера прочитал "цикл все-таки останавливается через 53 шага, с float-24". Из чего заключил, что он использует некий тип float-24.
А надо было читать как "с типом double цикл все-таки останавливается через 53 шага" и "с типом float цикл все-таки останавливается через 24 шага".
...
Рейтинг: 0 / 0
07.07.2010, 18:16:06
    #36728765
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Корректность цикла
1nTrO88 wrote:
> Автор: "1nTrO88"
> Добрый день всем. Я столкнулся со следующим вроде несложным вопросом(
> при приеме на работу).
> Имеется фрагмент кода:
> REAL X=1.0, E=1.0, Y=2.0
> DO {
> E=E/2;
> Y=E+X;
> }WHILE Y<>1
> Вопрос:Имеет ли смысл приведенный фрагмент?

Нет.

Должно быть

> }WHILE Y > 1.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Корректность цикла / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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