상수 0.0039215689는 무엇을 의미합니까?
다양한 그래픽 헤더 파일에서 이 연속적인 팝업을 볼 수 있습니다.
0.0039215689
색깔과 관련이 있는 것 같은데?
void RDP_G_SETFOGCOLOR(void)
{
Gfx.FogColor.R = _SHIFTR(w1, 24, 8) * 0.0039215689f;
Gfx.FogColor.G = _SHIFTR(w1, 16, 8) * 0.0039215689f;
Gfx.FogColor.B = _SHIFTR(w1, 8, 8) * 0.0039215689f;
Gfx.FogColor.A = _SHIFTR(w1, 0, 8) * 0.0039215689f;
}
void RDP_G_SETBLENDCOLOR(void)
{
Gfx.BlendColor.R = _SHIFTR(w1, 24, 8) * 0.0039215689f;
Gfx.BlendColor.G = _SHIFTR(w1, 16, 8) * 0.0039215689f;
Gfx.BlendColor.B = _SHIFTR(w1, 8, 8) * 0.0039215689f;
Gfx.BlendColor.A = _SHIFTR(w1, 0, 8) * 0.0039215689f;
if(OpenGL.Ext_FragmentProgram && (System.Options & BRDP_COMBINER)) {
glProgramEnvParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, 2, Gfx.BlendColor.R, Gfx.BlendColor.G, Gfx.BlendColor.B, Gfx.BlendColor.A);
}
}
//...more like this
이 숫자는 무엇을 의미합니까?왜 아무도 경찰이라고 선언하지 않는 거죠?
나는 구글에서 그것을 설명하는 것을 찾을 수 없었다.
0.0039215689
와 거의 같다1/255
.
이것이 OpenGL이기 때문에 퍼포먼스가 중요할 것입니다.따라서 성능상의 이유로 이 작업을 수행했을 것으로 추측해도 무방합니다.
역수로 곱하는 것이 255로 반복적으로 나누는 것보다 빠릅니다.
사이드 노트:
이러한 미세 최적화가 컴파일러에 맡겨지지 않는 이유는 안전하지 않은 부동소수점 최적화이기 때문입니다.즉, 다음과 같습니다.
x / 255 != x * (1. / 255)
부동 소수점 반올림 오류로 인해 발생합니다.
따라서 최신 컴파일러는 이 최적화를 수행할 수 있을 만큼 스마트하지만 컴파일러 플래그를 통해 명시적으로 지시하지 않는 한 이 최적화를 수행할 수 없습니다.
관련: GCC가 a*a*a*a*a*a*a에서 (a*a*a)*(a*a*a)로 최적화하지 않는 이유는 무엇입니까?
이 곱셈은0.0039215689f
는 0 ~ 255 범위의 정수 값 색 강도를 0 ~ 1 범위의 실제 값 색 강도로 변환합니다.
Ilmari Karonen이 지적했듯이, 이것이 최적화라고 해도, 그것은 다소 잘못 표현된 것이다.곱하는 것이 훨씬 더 명확할 것이다.(1.0f/255)
.
언급URL : https://stackoverflow.com/questions/22621241/what-does-the-constant-0-0039215689-represent
'programing' 카테고리의 다른 글
C코드('외부 C' 필요)가 C++로 컴파일 되어 있는지 여부를 검출하는 방법 (0) | 2022.08.15 |
---|---|
Vue2에서 동적 $refs 값을 가져오는 중 (0) | 2022.08.15 |
Java 메서드를 폐지된 것으로 선언하거나 마킹하려면 어떻게 해야 합니까? (0) | 2022.08.15 |
Vuex 스토어를 복사하여 새 스토어로 Import 방법 (0) | 2022.08.15 |
Vuex 4 및 Vue 3에서 'mapActions' 또는 'mapGetters'를 사용합니다. (0) | 2022.08.15 |