powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Тип данных Step в цикле For..Next
23 сообщений из 23, страница 1 из 1
Тип данных Step в цикле For..Next
    #36458835
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
dim stp as double
For i = x1 To x2 Step stp
Подскажите, пожалуйста, изменяется ли тип данных переменной stp при использовании в качестве Step в statement For...Next. Или остаётся как Double.
Не получается установить Step например в 3001
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Dim x1 As Double, x2 As Double, i As Double, stp As Double
    
    x1 =  5614079 . 95067864 
    x2 =  5766479 . 95067864 

    stp = (x2 - x1) /  3001 

    For i = x1 To x2 Step stp

        If i = x2 Then
            MsgBox "i=x2"
        End If

    Next i
...
Рейтинг: 0 / 0
Тип данных Step в цикле For..Next
    #36458860
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Факторизация чтоль мне нужна?
...
Рейтинг: 0 / 0
Тип данных Step в цикле For..Next
    #36458864
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Числа с плавающей точкой НЕТОЧНЫ
поэтому у вас ничего не получается
условие i = x2 не сработает
...
Рейтинг: 0 / 0
Тип данных Step в цикле For..Next
    #36458871
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Dim x1 As Double, x2 As Double, i As Double, stp As Double
    
    x1 =  5614079 . 95067864 
    x2 =  5766479 . 95067864 

    stp = (x2 - x1) /  3001 

    For i = x1 To x2 +  1  Step stp

        If Abs(i - x2) <  0 . 0001  Then
            MsgBox "i=x2"
        End If

    Next i


а) изменено условие
б) добавлено + 1

пункт б) из-за того, что, просто вылетает за пределы цикла раньше, чем сработает условие
...
Рейтинг: 0 / 0
Тип данных Step в цикле For..Next
    #36458886
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А всего-то нужно заменить For на While x1 < x2. Инкремент индекса перенесется в конец цикла, зато условие будет выполняться при любой точности.

Jah loves you.
...
Рейтинг: 0 / 0
Тип данных Step в цикле For..Next
    #36458887
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправочка, конечно While i < x2.

Jah loves you.
...
Рейтинг: 0 / 0
Тип данных Step в цикле For..Next
    #36458888
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот так нагляднее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Dim x1 As Double, x2 As Double, i As Double, stp As Double
    
    x1 =  5614079 . 95067864 
    x2 =  5766479 . 95067864 
    stp = (x2 - x1) /  3001 

    For i = x1 To x2 Step stp
    Next i
    MsgBox CStr(i) + vbCr + CStr(x2)
...
Рейтинг: 0 / 0
Тип данных Step в цикле For..Next
    #36458891
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyА всего-то нужно заменить For на While i < x2.

Ну да.
Я просто пытался не решить проблему, а продемонстрировать причину.
...
Рейтинг: 0 / 0
Тип данных Step в цикле For..Next
    #36458900
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, но мне нельзя терять ни одной цифры. Любая потеря приведет к невозможности дальнейшего расчета.
А Double в VB 6 неточны?
...
Рейтинг: 0 / 0
Тип данных Step в цикле For..Next
    #36458904
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...пока писал ещё 4 сообщения появилось...
...
Рейтинг: 0 / 0
Тип данных Step в цикле For..Next
    #36458910
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
timtimСпасибо, но мне нельзя терять ни одной цифры. Любая потеря приведет к невозможности дальнейшего расчета.
А Double в VB 6 неточны?

Double ПО ОПРЕДЕЛЕНИЮ неточны и вы не сможете не потерять цифры. Так устроен этот тип данных.

Какие у вас диапазоны? может подойдет currency и умножение на степени десятки?
...
Рейтинг: 0 / 0
Тип данных Step в цикле For..Next
    #36458934
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
диапазон данных от 0 до +- долгота, широта земного "шара" в метрах в кусках произвольной величины, т.е. задается прямоугольная область и надо прочитать из этой области данные с заданным шагом(шаг по Х и Y одинаков). такая вот заморочка.
...
Рейтинг: 0 / 0
Тип данных Step в цикле For..Next
    #36458939
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну так тогда вам вообще нужна произвольная точность, тут и double не поможет....

не, тут надо менять алгоритм, давайте подробнее
...
Рейтинг: 0 / 0
Тип данных Step в цикле For..Next
    #36458951
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
например
x1 = 5614079.95067864
x2 = 5766479.95067864
y1 = 6566149.93225016

нужно получить, например 3001 значение(1 значение равно, допустим 8 битам) по оси X в диапазоне с x1 по x2 при y1.
...
Рейтинг: 0 / 0
Тип данных Step в цикле For..Next
    #36458956
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
timtimнапример
x1 = 5614079.95067864
x2 = 5766479.95067864
y1 = 6566149.93225016

нужно получить, например 3001 значение(1 значение равно, допустим 8 битам) по оси X в диапазоне с x1 по x2 при y1.

В любом случае ваш способ ущербен - в результате постоянного суммирования накапливается ошибка.
Нужно каждое значение просчитывать по формуле.
...
Рейтинг: 0 / 0
Тип данных Step в цикле For..Next
    #36458959
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вернее, надо разбить диапазон x1 x2 на 3001(или любой проивольный шаг разбивки) равных отрезка
...
Рейтинг: 0 / 0
Тип данных Step в цикле For..Next
    #36458960
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1 + (x2 -x1) / 3001 * i

Что-то типа этого, но надо подумать над потерей точности, может математически переставить переменные в формулк
...
Рейтинг: 0 / 0
Тип данных Step в цикле For..Next
    #36458963
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
timtimвернее, надо разбить диапазон x1 x2 на 3001(или любой проивольный шаг разбивки) равных отрезка

вы, надеюсь понимаете, что при делении в большинстве случаев вы получаете число с бесконечным количеством знаком после запятой.

Так что вопрос ТОЧНОСТИ ПРЕДСТАВЛЕНИЯ не последний. Определитесь, с какой точностью нужно получить этот отрезок.

Тут пошло уже не программирование, а чистая математика
...
Рейтинг: 0 / 0
Тип данных Step в цикле For..Next
    #36458964
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
переменные x1,x2,y1,y2(прямоугольная облать) строга задана и изменению не подлежит.
надо как то подобрать шаг
...
Рейтинг: 0 / 0
Тип данных Step в цикле For..Next
    #36458968
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
timtimпеременные x1,x2,y1,y2(прямоугольная облать) строга задана и изменению не подлежит.
надо как то подобрать шаг

шаг=(x2-x1)/n
с заданной точностью

однако шагать им, как вы предлагаете (то есть суммировать последовательно) - нельзя, накопится погрешность
и программирование тут не причем - это чистая математика

я предложил другой способ "шагания", не накапливающий погрешность.
...
Рейтинг: 0 / 0
Тип данных Step в цикле For..Next
    #36458974
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
шаг=(x2-x1)/n

с этого я собственно и начал.
Спасибо, попробую на реальных данных погрешность в 0.0001, хотя я думаю это будет приемлемо при определенном масштабе.
...
Рейтинг: 0 / 0
Тип данных Step в цикле For..Next
    #36458980
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, потеря размером один метр приемлема.
...
Рейтинг: 0 / 0
Тип данных Step в цикле For..Next
    #36458984
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...при условии, что X и Y представлены в градусаx
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Тип данных Step в цикле For..Next
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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