Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Почему так непонятно выводит нуль в MVS 2010?
|
|||
|---|---|---|---|
|
#18+
Извиняюсь, заранее, за тупейший в истории планеты вопрос. Есть детский код: Код: plaintext 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. Выводит первыми нулевые элементы: Введите число элементов массива: 4 Введите элементы массива: 0 1 0 4 Нулевые элементы впереди: a[1] = 0 a[2] = -4.31602e+008 wtf ?! a[3] = 1 a[4] = 4 Где затерялся этот мусор в переменной? Или это связано со средой разработки? Благодарю за подсказку! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2012, 01:29 |
|
||
|
Почему так непонятно выводит нуль в MVS 2010?
|
|||
|---|---|---|---|
|
#18+
drcosmo, В С и С++ индексы массива начинаются с 0, а не с 1, как на это рассчитывает ваш код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2012, 01:32 |
|
||
|
Почему так непонятно выводит нуль в MVS 2010?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, спасибо! Что-то я тупанул :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2012, 01:35 |
|
||
|
Почему так непонятно выводит нуль в MVS 2010?
|
|||
|---|---|---|---|
|
#18+
Кстати, а почему в таком случае... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ...выводит примерно тоже самое? -1 -0.8 -0.6 -0.4 -0.2 -5.55112e-017 0.2 0.4 0.6 0.8 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2012, 01:46 |
|
||
|
Почему так непонятно выводит нуль в MVS 2010?
|
|||
|---|---|---|---|
|
#18+
drcosmo, float это не точный тип данных. Либо работай с целыми числами и подрисовывай точку в нужном месте, либо смирись с погрешностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2012, 02:12 |
|
||
|
Почему так непонятно выводит нуль в MVS 2010?
|
|||
|---|---|---|---|
|
#18+
Мой предыдущий ответ был просто указанием на явную проблему в коде, а не ответом почему код так работает. А -5.55112e-017 - это такой артефакт форматов float/double. Таких артефактов бывает несколько видов. В данном случае - из-за того, что в С/С++ невозможно точное представление любых десятичных чисел с фиксированной точкой во внутренних форматах (float, double) - например таких чисел, где десятичное число представляется в двоичном коде как бесконечная дробь. При достаточно большом числе промежуточных операций ошибка в младших разрядах двоичного представления числа накапливается, но в десятичном представлении она не сразу видна (например у -0.2 в double есть несколько бинарных представлений) Вам надо при отображении float/double всегда применять окруление до определенного числа знаков, так как в самых младших разрядах всегда возможен мусор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2012, 02:39 |
|
||
|
Почему так непонятно выводит нуль в MVS 2010?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, огромное спасибо за разъяснение. Теперь использую конструкцию cout << fixed << x << endl; и все прекрасно выводит! Вопрос исчерпан! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2012, 12:49 |
|
||
|
Почему так непонятно выводит нуль в MVS 2010?
|
|||
|---|---|---|---|
|
#18+
> > Вам надо при отображении float/double всегда применять окруление до > определенного числа знаков, так как в самых младших разрядах всегда возможен мусор. 0) это не мусор 1) никаких разрядов на самом деле нет. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2012, 00:29 |
|
||
|
Почему так непонятно выводит нуль в MVS 2010?
|
|||
|---|---|---|---|
|
#18+
MasterZiv > > Вам надо при отображении float/double всегда применять окруление до > определенного числа знаков, так как в самых младших разрядах всегда возможен мусор. 0) это не мусор 1) никаких разрядов на самом деле нет. 0) Это именно мусор, т.к. получен в результате операции над промежуточными данными хранящимися в двоичном виде с точностью превышающей точность входных десятичных данных. 1) Разряды есть у мантиссы. В частности у double гарантируется погрешность хранения не выше 15-го десятичного знака мантиссы, а у float - 7. А у соответствующих двоичных мантисс погрешность слегка меньше и эта разница принципиально неустранима - отсюда и всякие эффекты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2012, 04:15 |
|
||
|
Почему так непонятно выводит нуль в MVS 2010?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky0) Это именно мусор, т.к. получен в результате операции над промежуточными данными хранящимися в двоичном виде с точностью превышающей точность входных десятичных данных. Тав вообще нет точности. Они неточные все по определению. Anatoly Moskovsky1) Разряды есть у мантиссы. В частности у double гарантируется погрешность хранения не выше 15-го десятичного знака мантиссы, а у float - 7. А у соответствующих двоичных мантисс погрешность слегка меньше и эта разница принципиально неустранима - отсюда и всякие эффекты. блин, как мне это всё надоело. Я в смысле -- вообще глобально. Там нет вообще никаких гарантий. У тебя число может быть рациональным (записываемым в виде конечной десятичной дроби) и не быть рациональным в двоичной системе счисления (принципиально незаписываемым в виде конечной двоичной дроби). Там нет точности, погрешности. Всё неточно по определению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2012, 16:22 |
|
||
|
Почему так непонятно выводит нуль в MVS 2010?
|
|||
|---|---|---|---|
|
#18+
MasterZivТам нет точности, погрешности. Всё неточно по определению. Вам бы метрологию подучить, заодно узнаете что неточность как раз и вводит понятие погрешности. Погрешность это всего лишь максимальное отклонение между идеальным значением и его представлением. Ее не может не быть - в идеальном случае она равна нулю. В данном случае - float и double - она не равна нулю. Для float и double (и других) в ieee 754 описаны конкретные форматы хранения и способы перевода из других представлений, из чего легко выводятся все погрешности, и это вполне конкретные значения, которые я выше приводил. А если бы эти форматы были просто неточными, без каких либо гарантий меры неточности (погрешности) то 1) никакой практической разницы между float и double не было бы, 2) никто бы такими форматами не пользовался ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2012, 17:15 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38052105&tid=2020641]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
190ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 282ms |
| total: | 568ms |

| 0 / 0 |
