python比较两浮点数是否相等的方法


本文摘自php中文网,作者爱喝马黛茶的安东尼,侵删。

python如何比较两个浮点数是否相等?

相关推荐:《python视频》

float 类型不能比较相等或不等,但可以比较>,<,>=,<=

用==从语法上说没错,但是本来应该相等的两个浮点数由于计算机内部表示的原因可能略有微小的误差,这时用==就会认为它们不等。应该使用两个浮点数之间的差异的绝对值小于某个可以接受的值来判断判断它们是否相等,比如用

1

if (fabs(price - p) < 0.000001)

来代替

1

if (price == p)

很多工程的应用都是采用计算精确度的方式

定义一个精度,用差的绝对值比较,在精度范围内就认为是相等的;大小可以直接比较。

不可将浮点变量用“==”或“!=”与任何数字比较。
千万要留意,无论是float 还是double 类型的变量,都有精度限制。所以一定要
避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。
假设浮点变量的名字为x,应当将
if (x == 0.0) // 隐含错误的比较
转化为

1

if ((x>=-EPSINON) && (x<=EPSINON))

其中EPSINON 是允许的误差(即精度)。

计算机表示浮点数(float或double类型)都有一个精度限制,对于超出了精度限制的浮点数,计算机会把它们的精度之外的小数部分截断。因此,本来不相等的两个浮点数在计算机中可能就变成相等的了。例如:

1

float a=10.222222225,b=10.222222229

数学上a和b是不相等的,但在32位计算机中它们是相等的。

如果两个同符号浮点数之差的绝对值小于或等于某一个可接受的误差(即精度),就认为它们是相等的。

不要直接用“==”或者“!=”对两个浮点数进行比较,但是可以直接用“<”和“>”比较谁大谁小。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

#include

#include

#define EPSILON 1e-6

int main(void)

{

  float a = 0.000003;

  float b = 0.000005;

  printf("a=%f/n",a);

  printf("b=%f/n",b);

  printf("abs(a-b)=%f/n",abs(a-b));

  printf("fabs(a-b)=%f/n",fabs(a-b));

  if ( fabs(a-b) <= EPSILON )  //判断浮点数是否相等

  {

 printf("a==b/n");

  }else

  {

 printf("a!=b/n");

  }

  if ( fabs(a) <= EPSILON)  //判断浮点数是否等于0

  {

 printf("a==0/n");

  }else

  {

 printf("a!=0/n");

  }

  if (a > b)  //比较两个浮点数的大小,

  {

 printf("a>b/n");

  }else

  {

 printf("a

  }

  return 0;

}

以上就是python比较两浮点数是否相等的方法的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

详解Python中and和or的返回值

Python中import语句是什么 ?有什么作用?

什么是Python中唯一的映射类型

Python怎么发音

Python + selenium自动化环境搭建的完整步骤

Python怎么调试程序

Python如何合并两个列表?

安装Python怎么添加环境变量

Python运行其他程序的方法实例详解

Python类中怎么定义方法

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...