函数机实现数值判断的新方法
f(x)=(16!+1)√x,16!+1是在默认情况下能使f(0)=0&f(1E-99~1E99)=1&f(-1E99~-1E-99)=-1的方根数,如果设定保留的小数点位更小的话可以使用更小的数值。not:1-x,x为0或1and:x*y,x和y均为0或1or:(16!+1)√(x+y),x和y均为0或1
两数相等返回1,否则返回0:1-abs((16!+1)√(a-b))a==b -> 1-abs(f(0))=1a!=b -> 1-abs(f(1或-1))=0
两数不相等返回1,否则返回0:abs((16!+1)√(a-b))a!=b -> abs(f(1或-1))=1a==b -> abs(f(0))=0
假设a-b=c:
a小于b返回1,否则返回0:(16!+1)√(abs(c)-c)a<b -> f(正数-负数) -> f(正数)=1a==b ->f(0-0)=0a>b ->f(正数-正数) -> f(0)=0
a大于b返回1,否则返回0:(16!+1)√(abs(c)+c)a>b -> f(正数+正数) -> f(正数)=1a==b ->f(0+0)=0a<b -> f(正数+负数) -> f(0)=0
本帖最后由 kai901 于 2021-3-28 09:58 编辑
尽可能高的精度和尽可能少的字符数和尽可能不影响性能的比较方法:E15√(abs(x)),E15为10的15次方
(上面的16!没有考虑到内部精度)
not:1-x,x为0或1
and:x*y,x和y均为0或1
or:E15√(x+y),x和y均为0或1
==: 1-E15√(abs(x-y))
!=: E15√(abs(x-y))
a-b=c:
<: E15√(abs(c)-c)
<=: 1-E15√(abs(c)+c)
>: E15√(abs(c)+c)
>=: 1-E15√(abs(c)-c)
页:
[1]