相干引荐:《python视频》
float 范例不能比较相称或不等,但能够比较>,<,>=,<=
用==从语法上说没错,然则原本应该相称的两个浮点数因为盘算机内部示意的缘由能够略有细小的偏差,这时候用==就会以为它们不等。应该运用两个浮点数之间的差别的绝对值小于某个能够接收的值来推断推断它们是不是相称,比如用
if (fabs(price - p) < 0.000001)
来替代
if (price == p)
许多工程的运用都是采纳盘算精确度的体式格局
定义一个精度,用差的绝对值比较,在精度范围内就以为是相称的;大小能够直接比较。
不可将浮点变量用“==”或“!=”与任何数字比较。
万万要注意,无论是float 照样double 范例的变量,都有精度限定。所以一定要
防止将浮点变量用“==”或“!=”与数字比较,应该想法转化成“>=”或“<=”情势。
假定浮点变量的名字为x,应该将
if (x == 0.0) // 隐含毛病的比较
转化为
if ((x>=-EPSINON) && (x<=EPSINON))
个中EPSINON 是许可的偏差(即精度)。
盘算机示意浮点数(float或double范例)都有一个精度限定,关于超出了精度限定的浮点数,盘算机会把它们的精度以外的小数部份截断。因而,原本不相称的两个浮点数在盘算机中能够就变成相称的了。比方:
float a=10.222222225,b=10.222222229
数学上a和b是不相称的,但在32位盘算机中它们是相称的。
假如两个同标记浮点数之差的绝对值小于或即是某一个可接收的偏差(即精度),就以为它们是相称的。
不要直接用“==”或许“!=”对两个浮点数举行比较,然则能够直接用“<”和“>”比较谁大谁小。
#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比较两浮点数是不是相称的要领的细致内容,更多请关注ki4网别的相干文章!