двойное сравнение с нулевым частным случаем?

2

Я инициализирую двойной массив:

double [] foo = new double[n];

Я понимаю, что спецификация java-языка приводит к инициализации всех значений в массиве до нуля.

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

Итак, чтобы проверить, имеет ли конкретный элемент ненулевое значение, безопасно ли просто использовать

if (foo[i] > 0.0)

или я должен использовать epsilon. Или аналогично, если я хочу знать, не установлено ли значение, могу ли я использовать ==, учитывая, что нули не были вычисленными значениями, но исходными инициализированными нулями? Обычно, конечно, я бы никогда не использовал == для сравнения чисел с плавающей запятой, но мне интересно, является ли это особым случаем?

Спасибо!

  • 2
    Я не очень понимаю вопрос. Что ты пытаешься сделать?
  • 0
    Почему вы хотите использовать эпсилон? Вы предлагаете проверить, установлена ли ячейка с помощью `if (foo [i]> ep) ', где ep больше 0?
Показать ещё 10 комментариев
Теги:
double

2 ответа

2
Лучший ответ

Рассмотрим этот код

public static void main(String[] args) {
    double [] foo = new double[10];
    foo[5] = 10;                            // Sets the sixth element to 10
    for (int i = 0; i < foo.length; i++) {
        double val = foo[i];
        if (val != 0) {
            System.out.printf("foo[%d] = %f\n", i, val);
        }
    }
}

Он выводит

 foo[5] = 10.000000
  • 1
    Конечно, это ничего не доказывает. Но это достаточно веские косвенные доказательства.
  • 1
    Ну, я думаю, что мы можем полагаться, что сразу после инициализации массива все значения равны == 0.0 поэтому этого должно быть достаточно для проверки != 0.0
Показать ещё 1 комментарий
1

Невозможно использовать

if (foo[i] > 0.0)
  • 0
    Но он не проверяет, является ли элемент ненулевым. И можно использовать == для сравнения double с нулем, если целью является проверка именно на ноль.
  • 0
    Да, это нормально использовать ==. Но то, что вы, вероятно, хотите сделать, это (если foo [i]! = 0.0)
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню