|
|
|
Корректность цикла
|
|||
|---|---|---|---|
|
#18+
Добрый день всем. Я столкнулся со следующим вроде несложным вопросом( при приеме на работу). Имеется фрагмент кода: 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. Прошу объяснить эту ситуацию.Благодарю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 08:50:07 |
|
||
|
Корректность цикла
|
|||
|---|---|---|---|
|
#18+
1nTrO88, как вы думаете, к чему стремится последовательность 1 + 1 / 2; 1 + 1 / 4; 1 + 1 / 8; ...; 1 + 1 / 2 ^ i? Очевидно, что к 1. Учитывая, что у компьютера точность ограничена, то 1 / 2 ^ i станет нулем достаточно быстро (при достаточно маленьком i). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 09:06:38 |
|
||
|
Корректность цикла
|
|||
|---|---|---|---|
|
#18+
an0nym1nTrO88, как вы думаете, к чему стремится последовательность 1 + 1 / 2; 1 + 1 / 4; 1 + 1 / 8; ...; 1 + 1 / 2 ^ i? Очевидно, что к 1. Все-таки к 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 09:11:15 |
|
||
|
Корректность цикла
|
|||
|---|---|---|---|
|
#18+
Mozok, 1 + 1 / 2 ^ 53 ~= 2 значит? Судя по вашему посту - да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 09:14:53 |
|
||
|
Корректность цикла
|
|||
|---|---|---|---|
|
#18+
О, теперь понял . Спасибо большое. ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 09:15:48 |
|
||
|
Корректность цикла
|
|||
|---|---|---|---|
|
#18+
А теперь что-то опять какая-то путаница. я так понимаю эта последовательность стремится к начальному значению (2)?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 09:21:00 |
|
||
|
Корректность цикла
|
|||
|---|---|---|---|
|
#18+
an0nym, согласен, облажался :). Действительно стремится к 1. Я с бесконечной геом. прогрессией перепутал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 10:48:31 |
|
||
|
Корректность цикла
|
|||
|---|---|---|---|
|
#18+
an0nymУчитывая, что у компьютера точность ограничена, то 1 / 2 ^ i станет нулем достаточно быстро (при достаточно маленьком i). Не достаточно быстро. А вот 1+1/2^i достаточно быстро превратиться в 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 11:57:23 |
|
||
|
Корректность цикла
|
|||
|---|---|---|---|
|
#18+
Олег_Б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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 12:16:15 |
|
||
|
Корректность цикла
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 12:40:12 |
|
||
|
Корректность цикла
|
|||
|---|---|---|---|
|
#18+
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. Не поместилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 13:49:32 |
|
||
|
Корректность цикла
|
|||
|---|---|---|---|
|
#18+
an0nym, ну вы, блин, даете... 1 / 2 ^ 54 = 1.000000000000000 * 2 -54 - все прекрасно поместилось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 14:02:46 |
|
||
|
Корректность цикла
|
|||
|---|---|---|---|
|
#18+
Mozok, http://en.wikipedia.org/wiki/Decimal64_floating-point_format Я, конечно, не буду утверждать, что вы не правы. Но эксперимент ТСа, описанный в конце первого поста, подтверждает мою правоту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 14:08:43 |
|
||
|
Корректность цикла
|
|||
|---|---|---|---|
|
#18+
an0nym, http://en.wikipedia.org/wiki/Double_precision_floating-point_format Первый пост как раз потвеждает, что 1 + 1 / 2 54 -> 1. Это и понятно, поскольку происходит переполнение мантиссы. Но вот насчет 1 / 2 54 -> 0 уже не так очевидно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 14:55:32 |
|
||
|
Корректность цикла
|
|||
|---|---|---|---|
|
#18+
А, теперь понял. Согласен, вы правы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 15:37:18 |
|
||
|
Корректность цикла
|
|||
|---|---|---|---|
|
#18+
MozokНо вот насчет 1 / 2 54 -> 0 уже не так очевидно.А у float-24 какой размер показателя степени? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 15:39:40 |
|
||
|
Корректность цикла
|
|||
|---|---|---|---|
|
#18+
Mozokmiksoft, Single precision . 24 бита мантиссы, 8 бит показателя.Про Single precision я в курсе. А вот float-24 первый раз вижу. И, думаю, это не одно и то же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 16:17:23 |
|
||
|
Корректность цикла
|
|||
|---|---|---|---|
|
#18+
Mozokmiksoft, вы про этот float говорите?Нет, сорри. Это я криво фразу топикстартера прочитал "цикл все-таки останавливается через 53 шага, с float-24". Из чего заключил, что он использует некий тип float-24. А надо было читать как "с типом double цикл все-таки останавливается через 53 шага" и "с типом float цикл все-таки останавливается через 24 шага". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 17:49:11 |
|
||
|
Корректность цикла
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 18:16:06 |
|
||
|
|

start [/forum/topic.php?fid=16&tid=1343584]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
430ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 749ms |

| 0 / 0 |
