📜  test valeurs 2 flottants python - TypeScript (1)

📅  最后修改于: 2023-12-03 15:35:18.764000             🧑  作者: Mango

Python和TypeScript中测试两个浮点数的值

在Python和TypeScript中,比较两个浮点数是否相等并不是一件容易的事情。由于浮点数在二进制中的表示方式的限制,两个很接近的浮点数相减的结果可能并非你所期望的值。因此,为了比较两个浮点数是否在某个特定误差范围内相等,我们需要进行一些特殊的处理。

Python

在Python中,我们通常使用math.isclose函数来比较两个浮点数是否在一定范围内相等。这个函数的语法如下:

import math

math.isclose(a, b, rel_tol=1e-09, abs_tol=0.0)

其中:

  • a和b是要比较的两个浮点数
  • rel_tol是相对误差的阈值,默认为1e-09
  • abs_tol是绝对误差的阈值,默认为0.0

示例代码如下:

import math

a = 0.1 + 0.1 + 0.1
b = 0.3

if math.isclose(a, b):
    print("a and b are close")
else:
    print("a and b are not close")

输出结果为:

a and b are close
TypeScript

在TypeScript中,由于没有内置的math.isclose函数,我们可以通过编写一个自定义的函数来实现这个功能。比如下面这个函数:

function areClose(a: number, b: number, relativeTolerance: number = 0.000001, absoluteTolerance: number = 0.000001): boolean {
  const diff = Math.abs(a - b);
  const tolerance = Math.max(relativeTolerance * Math.max(Math.abs(a), Math.abs(b)), absoluteTolerance);
  return diff <= tolerance;
}

其中:

  • relativeTolerance是相对误差的阈值,默认为0.000001
  • absoluteTolerance是绝对误差的阈值,默认为0.000001

示例代码如下:

const a = 0.1 + 0.1 + 0.1;
const b = 0.3;

if (areClose(a, b)) {
  console.log("a and b are close");
} else {
  console.log("a and b are not close");
}

输出结果为:

a and b are close

总结:

因为浮点数的内部表达方式的限制,直接比较两个浮点数的值很可能得到不正确的结果。因此,在Python和TypeScript中,我们需要使用一些特殊的函数或自定义函数,通过设定一个误差范围来判断两个浮点数的值是否相等。