programing

상수 0.0039215689는 무엇을 의미합니까?

newsource 2022. 8. 15. 21:19

상수 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