Отличие функции для определения диапазонов для вещественных чисел от аналогичной функции для целых чисел

Для целых чисел:

def make_urange(urange,uranges):
    i = minimum
    while i <= maximum:
        l = []
        l.append(i)
        i = i + urange
        if i < maximum:
            l.append(i-1)
        else:
            i = maximum + 1
            l.append(maximum)
        uranges.append(l)

Для вещественных чисел:

def make_urange(urange,uranges):
    i = minimum
    while i <= maximum:
        l = []
        l.append(round(i,10))
        i = i + urange
        if i < maximum:
            l.append(round((i-0.0000000001),10))
        else:
            i = maximum + 1
            l.append(round(maximum,10))
        uranges.append(l)

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

В данном случае предстоящее перед i значение принимается меньше, чем i на 10 знаков после точки. Однако было бы достаточно делать его меньше в зависимости от точности обрабатываемых данных (определять количество знаков после точки). Дело осложняется тем, что данные могут содержать значения разной точности. Пришлось бы писать код, определяющий наиболее точное число в переданной последовательности.

Также не совсем ясна особенность обработки вещественных чисел компьютером, и почему используется округление. Но протестировано и работает: все значения учитываются.

  Создание генератора Python: Автоматизация и упрощение разработки
Оцените статью
( Пока оценок нет )
Поделиться с друзьями
Python для начинающих
Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x