0
난 그냥 잘 작동이 코드가 있습니다직접 함수 호출로 변수를 바꿀 때 다른 결과가 나타나는 이유는 무엇입니까?
long nodeDistance(node_t a, node_t b) {
long d1 = abs(a.passi_1 - b.passi_2);
long d2 = abs(a.passi_2 - b.passi_2);
return d1 + d2;
}
내가 링크 된리스트를 호출, 그리고 그것은 그럴듯한, 긍정적 인 결과 (120,259,067,966)을 반환합니다. 그러나 두 변수를 모두 인라인하면 아주 이상하게 작동합니다. 나는 또한 컴파일이 훨씬 느리다는 것을 알았다.
long nodeDistance(node_t a, node_t b) {
return abs(a.passi_1 - b.passi_1) + abs(a.passi_2 - b.passi_2);
}
동일한 링크 된 목록을 통해 호출 할 때 음수 (-16322)를 반환합니다. 왜 이런거야? abs
가 int
를 반환, 그래서 abs(...) + abs(...)
의 결과가 다음 return
키워드로 long
에 캐스팅 (하는 것입니다 때로는 오버 플로우), int
입니다 : 두 번째 기능은 오버 플로우 때문에
거리를 계산하기위한 공식은 두 코드에서 다릅니다. –
대신'abs()'두 세트의 코드는'labs()'를 사용해야합니다. – user3629249