@setFloatMode

@setFloatMode

도입

현재 스코프에서 부동소수점 연산이 어떻게 처리될지에 대한 규칙을 바꿔요.

출처: Zig Documentation

본문

@setFloatMode(comptime mode: FloatMode) void

현재 스코프에서 부동소수점 연산이 정의되는 방식에 대한 규칙을 바꿔요.

  • .strict (기본값) - 부동소수점 연산은 엄격한 IEEE 규정을 따릅니다.

  • .optimized - 부동소수점 연산은 다음의 모든 작업을 수행할 수 있습니다:

    • 인자와 결과가 NaN이 아니라고 가정합니다. 최적화는 NaN에 대해 합법적인 동작을 유지해야 하지만, 결과의 값은 정의되지 않습니다.
    • 인자와 결과가 +/-Inf가 아니라고 가정합니다. 최적화는 +/-Inf에 대해 합법적인 동작을 유지해야 하지만, 결과의 값은 정의되지 않습니다.
    • 0인 인자나 결과의 부호를 무시합니다.
    • 나눗셈을 수행하지 않고 인자의 역수를 사용합니다.
    • 부동소수점 수축(contraction)을 수행합니다 (예: 곱셈 후 덧셈을 fused multiply-add로 융합).
    • 부동소수점에서 결과를 바꿀 수 있는 대수적으로 동등한 변환을 수행합니다 (예: 재결합).

    이는 GCC의 -ffast-math와 동등합니다.

부동소수점 모드는 자식 스코프에 상속되고, 어떤 스코프에서든 재정의할 수 있어요. struct나 모듈 스코프에서 comptime 블록을 사용해 부동소수점 모드를 설정할 수 있어요.

FloatMode@import("std").lang.FloatMode로 찾을 수 있어요.

See also:

더 알아보기