2014-01-08 4 views
2

Я инициализация двойного массива:двойной сравнение к нулю специальный чехол?

double [] foo = new double[n]; 

Я понимаю, что спецификации языка Java вызывают все значения в массиве должны быть инициализированы до нуля.

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

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

if (foo[i] > 0.0) 

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

Спасибо!

+2

Я не очень понимаю вопрос. Что ты пытаешься сделать? –

+0

Почему вы хотите использовать epsilon? Вы предлагаете проверить, установлена ​​ли ячейка с 'if (foo [i]> ep) ', где ep больше 0? – stewSquared

+0

Если вы пытаетесь определить, какие значения заданы, лучше использовать 'Double []'. Затем вы можете использовать «null», чтобы указать, что значение не задано. –

ответ

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' –

+0

@HotLicks Нью-Йорк такой замечательный город. Хотя сегодня я был в библиотеке. Ребята очень грубые. Я сказал: «Мне нужна карта». Он говорит: «Вы должны доказать, что вы гражданин Нью-Йорка». Поэтому я ударил его. - Эмо Филлипс –

1

Там не должно быть проблемой, с помощью

if (foo[i] > 0.0) 
+0

Но он не проверяет, не отличается ли элемент от нуля. И это нормально использовать '==', чтобы сравнить «double» с нолем, если целью является проверка нулевого нуля. –

+0

Да, это нормально использовать ==. Но вы, вероятно, захотите сделать это (если foo [i]! = 0.0) –

+0

, если я знаю, что мои значения либо будут равны нулю, либо положительному числу, что более эффективно с точки зрения вычислений: 'if (x> 0.0)' или 'if (x! = 0.0)'? Благодаря! – PurpleVermont

Смежные вопросы