utils.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /**
  2. * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
  3. * SPDX-License-Identifier: MIT
  4. */
  5. import { Epsilon } from './constant';
  6. /** 检查浮点数 a 是否等于 b */
  7. export const isEqual = (a: number | undefined, b: number | undefined): boolean => {
  8. if (a === undefined || b === undefined) {
  9. return false;
  10. }
  11. // 检查 a 和 b 的差的绝对值是否小于 Epsilon
  12. return Math.abs(a - b) < Epsilon;
  13. };
  14. /** 检查浮点数 a 是否小于 b */
  15. export const isLessThan = (a: number | undefined, b: number | undefined): boolean => {
  16. if (a === undefined || b === undefined) {
  17. return false;
  18. }
  19. // 检查 a 是否显著小于 b
  20. return b - a > Epsilon;
  21. };
  22. /** 检查浮点数 a 是否大于 b */
  23. export const isGreaterThan = (a: number | undefined, b: number | undefined): boolean => {
  24. if (a === undefined || b === undefined) {
  25. return false;
  26. }
  27. return a - b > Epsilon;
  28. };
  29. /** 检查浮点数 a 是否小于等于 b */
  30. export const isLessThanOrEqual = (a: number | undefined, b: number | undefined): boolean =>
  31. isEqual(a, b) || isLessThan(a, b);
  32. /** 检查浮点数 a 是否大于等于 b */
  33. export const isGreaterThanOrEqual = (a: number | undefined, b: number | undefined): boolean =>
  34. isEqual(a, b) || isGreaterThan(a, b);
  35. /** 检查值是否是数字类型 */
  36. export const isNumber = (value: unknown): value is number =>
  37. typeof value === 'number' && !isNaN(value);