Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
AndyM Гость
|
Добавлено: Сб Дек 07 2002 08:22 Заголовок сообщения: Бейсик: грабля или фишка (последняя попытка) |
|
|
Попросили меня помочь с контрольной по информатике. Задание: вычислить значение функции при аргументе x[1;2] с приращением 0.05. Результат вывести в виде таблицы. ОК. Рисую на QBasic: x=1 while x<=2 print x x=x+0.05 wend На экране вывод: 1 1.05 1.1 ... 1.5 1.5499999 ... 1.9999999 Ч то за грабли? Переношу код в VB5 там дебаг рисует правильно, НО! почему-то только до 1.95. Ставлю брекпойнт на wend, спрашиваю: ?x 2 ?x=2 False (!!!!!!) ?x^2 4 ?x-2 8,88178419700125E-16 (???????) Расскажите, где грабли, не дайте помереть неграмотному!!! |
|
Вернуться к началу |
|
|
Олигарх
Зарегистрирован: 28.09.2002 Сообщения: 102
|
Добавлено: Сб Дек 07 2002 18:51 Заголовок сообщения: Re: |
|
|
Бейсик - сплошные грабли. |
|
Вернуться к началу |
|
|
Вячеслав Гость
|
Добавлено: Вс Дек 08 2002 12:22 Заголовок сообщения: Re: Бейсик: грабля или фишка (последняя попытка) |
|
|
почитай книгу по Basic для начала определи тип X и все будет ОК |
|
Вернуться к началу |
|
|
AndyM Гость
|
Добавлено: Пн Дек 09 2002 05:22 Заголовок сообщения: Re: Бейсик: грабля или фишка (последняя попытка) |
|
|
Я так полагаю, что Вы, дорогой, внимательно эти книги изучили... Прекрасно. Дело в том, что как ни объявляй переменную, но если к 1.5 прибавить 0.05, то с любой степенью точности будет 1.55, а не 1.549999! Добавьте объявление dim х as single, замените в условии цикла 2 и посмотрите! |
|
Вернуться к началу |
|
|
Old_Den Гость
|
Добавлено: Пн Дек 09 2002 12:25 Заголовок сообщения: Re: Бейсик: грабля или фишка (последняя попытка) |
|
|
Ха, наивный, там тип Single - кривой, используй double. Я когда бухгалтерию писал - та же фигня была... |
|
Вернуться к началу |
|
|
Вячеслав Гость
|
Добавлено: Пн Дек 09 2002 12:41 Заголовок сообщения: Re: Бейсик: грабля или фишка (последняя попытка) |
|
|
Да батенька учитца вам надо! Почитай книги особенно раздел о типах данных Объяви свою переменную как double и запусти свою Super программу и удивись результатам |
|
Вернуться к началу |
|
|
AndyM Гость
|
Добавлено: Пн Дек 09 2002 13:29 Заголовок сообщения: Re: Бейсик: грабля или фишка (последняя попытка) |
|
|
Слава, учиться полезно всем и всегда, полностью согласен. Почему бы тебе, прежде чем значительно сотрясать воздух прописными истинами, не попробовать самому запустить такую вот Супер-программу. Я тебя уверяю, ты будешь сильно удивлен! Итак, я УТВЕРЖДАЮ, что следующий код dim x as Double (пусть так!) x=1 while x<=2 debug.print x x=x+0.05 wend работает только до 1.95. Все результаты по проверке значения х после последней итерации см. в первом сообщении. МОЖЕТ КТО-НИБУДЬ ГРАМОТНО МНЕ ЭТО ОБЪЯСНИТЬ? |
|
Вернуться к началу |
|
|
Вячеслав Гость
|
Добавлено: Пн Дек 09 2002 15:40 Заголовок сообщения: Re: Бейсик: грабля или фишка (последняя попытка) |
|
|
Ты не поверишь не удивлен. Чувствую дружок ты хотел увидеть цифру 2!? тогда надо записать так Dim x As Currency '!!!!!!!!!!!! x = 1 While x |
|
Вернуться к началу |
|
|
Вячеслав Гость
|
Добавлено: Пн Дек 09 2002 15:41 Заголовок сообщения: Re: Бейсик: грабля или фишка (последняя попытка) |
|
|
В догонку .все как бы безобидно но ....: Dim a as Integer Dim b as Integer Dim RESULT as Long a=100 b=400 RESULT = a * b Debug.Print RESULT
Это к вопросу "сотрясать воздух прописными истинами" если бы ты их знал то не возникало бы таких вот вопросов. |
|
Вернуться к началу |
|
|
AndyM Гость
|
Добавлено: Вт Дек 10 2002 06:13 Заголовок сообщения: Re: Бейсик: грабля или фишка (последняя попытка) |
|
|
Что-то, Славик, стало меня общение с тобой понемногу напрягать... Итак, последовательным методом тыка сначала ты советуешь объявить как Double - и это не работает. Затем все-таки ты находишь подходящий тип для данного отдельно взятого куска кода, более того - для данных отдельно взятых чисел (измени x с 1 на любое, не подходящее под Currency)! Дорогой, да неужели я не сделал уже всего этого еще неделю назад, когда впервые столкнулся с этой бедой! И не провел кучу экспериментов и с объявлениями, и с разными фактическими значениями! Также ежу понятно, что выход есть всегда, и дополнительно наворачивая Round() и т.д., можно сделать все, что хочешь! К чему твой пример последний, я вообще не понял... Впрочем, глубоким спецом по Бейсику я не являюсь, да я вроде и не скрывал этого, грабля меня заинтересовала из любопытства и вследствие своей очевидной "грабельности". И, судя по тому, что остальное сообщество молчит, я прихожу к выводу, что это если и не ошибка (да я так и не думал, ясно, что за столько лет существования языка ее бы исправили), то вполне очевидное и довольно большое,с моей точки зрения,неудобство . Засим заканчиваю. |
|
Вернуться к началу |
|
|
|