2014-01-17 3 views
2

У меня проблема с фрагментом кода, в котором у меня есть оператор if, который проверяет диагональные элементы сложного массива, и если они (1,0) (что означает, что действительная часть 1, а мнимая часть - 0) или очень близко к ней, то продолжайте; иначе остановитесь. Но по какой-то причине операция всегда возвращает 0, хотя элементы (0,999999, 0,000000), (1,000001, 0,000000) и т.д.Если проблема с условиями (C++)

Вот код, у меня есть:

for (i=1; i<=n; i++){ 
    if ((real(c[i][i][1]) < (1/100000)+1) && (imag(c[i][i][1]) < 1/100000) && (real(c[i][i][1]) > (-1/100000+1) && (imag(c[i][i][1]) > -1/100000)){ 
     cout<<"Operation continues..."; 
    } 
    else 
     return 0; 
} 

Спасибо заранее.

+2

Вы находитесь в над головой. Начните с чего-то простого. Например, сначала выведите значение «1/100000» и посмотрите, насколько оно вам кажется. –

+1

10/100000 Это даст значение 0, поскольку оно является целым делением. Возможно, вам понадобится 10.0/100000 – jcoder

+0

Рефакторинг, прежде чем обращаться за помощью. –

ответ

5

Это целое деление дает 0, так как величина знаменателя больше, чем в числителе:

1/100000 

Вы должны использовать по крайней мере одно число с плавающей точкой здесь. Например

1.0/100000 
+0

Это сработало, спасибо многому человеку. – user2661191

0

1/100000 == 0 как это целочисленное деление: вы можете написать 0.00001 или 1. /100000.

Кстати, вы можете написать цикл:

constexpr double thresold = 0.00001; 
for (i = 1; i <= n; i++) { 
    if (std::abs(real(c[i][i][1]) - 1.) < thresold 
     && std::abs(imag(c[i][i][1]) - 1.) < thresold) { 
     cout << "Operation continues..."; 
    } 
    else 
     return 0; 
} 
+0

Или просто просто проверьте, есть ли 'std :: cabs (c [i] [i] [1] - 1) LutzL

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