#include <time.h>
int main()
{
int a,b
srand(time(NULL))
a=rand()
scanf("%d",&b)
a==b?printf("true"):printf("false")
return 0
}
//运行示例:
如果小于某一个精度则认为是相等:if abs(M-A) <1E-6 THEN 相等 ELSE 不等
判断变量M是否大于常数A
if ABS(M-A) >1E-6 AND M-A >0 THEN 大于 ELSE 小于等于
判断变量M是否小于常数A
if ABS(M-A) >1E-6 AND M-A <0 THEN 大于 ELSE 小于等于
以上代码只能在变量M是single的情况下才走的通
当变量M是double时,需要将1E-6改成1E-14
其实,你要注意一点:VB是支持自动类型转换的,小于1E-6,那么我们假设是1E-7,VB会自动将其处理为double,而double里的小于1E-15,VB根本支持不到这个精度,就处理成0了,那么对于single而言,M-(1E-7)实际上这个结果已经被VB自动处理为一个double了,所以才会出现一个single和一个常数比较时出现的精度误差,
当然,如果觉得这个表达式很复杂,那么可以把所有的参与single类型变量的常数都强制加一个惊叹号比如1E-7!,这样,这个值就是0了,至于误差问题,VB内部会做处理,除非你进行大量的计算,否则这样的误差VB自身可以消除,因为虽然浮点数有误差,但是到达十进制层次的时候,实际上的精度要比给出定义的精度大一些,只要多出一个二进制位,那么理论上说,不会有太大的偏差
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)