내가이 C 코드가 언 롤링 루프 : 나는 손으로이 4 마디해야하는, 그래서 시도 컴파일러 최적화 이유로효율적으로 손
for (k = 0; k < n_n; k++) {
if (k == i || k == j) continue;
dd=q2_vect[k]-q1_vect;
d2=dd*dd;
if (d2<0) {
a=1;
break;
}
}
(셀 프로세서의 SPE에 일) :
dd=q2_vect[0]-q1_vect;
d2=dd*dd;
if (d2<0)goto done;
dd=q2_vect[1]-q1_vect;
d2=dd*dd;
if (d2<0)goto done;
dd=q2_vect[2]-q1_vect;
d2=dd*dd;
if (d2<0)goto done;
.....
.....
// end
goto notdone;
done:
ok=0;
notdone:
.....
하지만 난
if (k == i || k == j) continue;
로하고 lopp는 "n_n"에 각 실행에 의존한다는 사실에 대처하는 방법을 알고하지 않으며,에 의해 손 "나는 최대 값"n_n "을 얻을 수 있기 때문에 코드를 여러 번 작성해야합니다.
어떻게 고칠 수 있다고 생각하십니까?
'd2 <0 '이 유효하지 않은 경우 C. – SingleNegationElimination
그리고 필요한 괄호를 추가하더라도 좋은 컴파일러는 C 언어가 사실 일 수있는 조건을 정의하지 않기 때문에 전체 if 문을 최적화합니다. (코드는 정의되지 않은 동작에 의존하려고 시도하는 것 같습니다.) –
오른쪽 :'dd == _Imaginary_I' ->'dd * dd == -1.0' 그리고 유효한 C입니다. – Vovanium