template<typename T>
inline T min(T a, T b, T c)
{
T t[3] = {a, b, c};
return t[(b < a) * (b < c) + (c < a) * (c <= b) * 2];
}
참신하지 않으뇨?
대입은 마지막 한 번만 ! (배열에 넣는건 다음 계산이랑 병렬화 되니)
성능 괜찮은 것 같아. 쿠히히.
template<typename T>
inline T min(T a, T b, T c)
{
T t[3] = {a, b, c};
return t[(b < a) * (b < c) + (c < a) * (c <= b) * 2];
}
참신하지 않으뇨?
대입은 마지막 한 번만 ! (배열에 넣는건 다음 계산이랑 병렬화 되니)
성능 괜찮은 것 같아. 쿠히히.
(b < a) * (b < c)이면 b가 제일 작을 때 1이 되는 건데 제일 작은 수인데 +1을 하는 이유가...? 근데 정상 동작하는 코드인 건가요? 제가 로직을 잘못 이해했나...
부등호 방향이 반대로 되어될 거 같은데 말이죠.
t[(b > a) * (b > c) + (c > a) * (c > b) * 2]처럼 짜면 이해는 되는데... 왜 저렇게 짜신 거지... 흐음...
b 가 제일 작을 때 1, c 가 제일 작을 때 2. 둘 다 아닐땐 0 을 만들잖아
배열에 a, b, c 를 넣어놨다구 순서대롱
미친. max가 아니라 min 값 구하기네. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
학창시절 '아닌 것을 고르시오'했다가 맞는 거 골라서 틀리기 딱 좋은 유형인 듯 제가 ㅠㅠ
저 식의 계산 결과는 배열의 인덱스입니다용.
이해했어요. max 구하는 함수인 줄 ㅠㅠ
아름다운 코드지? ㅋㅋ 성능도 3항 연산자 쩜쩌먹음.
깨알같은 <= 잼.
<= 두 군데 쓰면 난리난다. (태그 3되는 수가)
& 안쓰고 * 쓴 이유는 어차피 값이 작으면 똑같은 성능인데다 괄호 많이치기 싫어서.
더 최적화시킬 여지는 보이네요.
뭐 뭐~
가령 *(곱셈) 대신에 |(or) 연산자를 써도 될 거고요.
아 실수. &(and).
return t[((b < a) & (b < c)) | (((c < a) & (c <= b)) << 1)];
위에 적어놨잖아.
& 안쓰고 * 쓴 이유는 <--
그렇군요. 더 최적화할 방법은 없으려나요? ㅋㄷㅋㄷ
메모리를 조금 더 써서라도...
딱히 최적화 할 여지가 없쥐~
돌려보니까 비트연산쓴쪽이 8% 정도 빠르당. 뭐 약간의 stall 이 줄긴하는듯.
재밌는건 <= 의 위치를 b < c 로 옮기면 느려져. 8% 정도 ㅋㄷㅋㄷ
오히려 비트 연산을 쓰는 게 괄호 수가 더 줄죠. 초창기 C는 &&, || 연산자가 없어서 &, |로 했었는데 그 흔적 때문에 연산자 우선 순위가 비교 연산자가 더 우선해요. 그래서 return t[b < a & b < c | (c < a & c <= b) << 1]만 써도 돼요.
어 그래. 너도 이런거 하나 만들어 올려봥
밥먹으러 가는중
ㄷㄷ 늦게 드시는 군요. 성님 진지 맛나게 드세요~
웅 일어나기 귀찮아 ㅠㅠ
아 그리고 비트 연산에서 &와 |는 각각 산술 연산의 *, +의 개념처럼 받아들여져서 이것도 우선 순위가 &가 |보다 우선해요. 당연히 괄호칠 필요가 없고요.
응 근데 가끔 다른언어랑 헷갈려서 걍 괄호침 ㅋㅋ
점심 메뉴는 육개장~
오장(五臟) 말고 여섯 번째 장도 있나요? (퍽) 육 개 장 이라고 하셔서 ㅋㄷㅋㄷ
http://autogram.tk/이
중고차 어플리케이션 어떤가요?