Monthly Archives: January 2020

divide zero

在常规的数字运算中,除以零在代码里是不合法的,在不同的编程语言就不同的处理。比如在C#中,在编译时会提示CS0020: Division by constant zero, 在运行时会抛出异常: System.DivideByZeroException: ‘Attempted to divide by zero.’。

在Javascript中,有些微妙,区分处理了0和其他数字做为除数。

这个与数学里面极限1/x,x->0时的极限,但是左极限和右极限不相等,一个正无穷,一个是负无穷, 0点极限不存在。虽然JS结果不正确,不过这个可以避免一些麻烦(比如上面C#的异常)。

check time range overlap

目前维护的系统里面有一个关于日期与其他现有日期数据重叠的校验,之前的写法有点乱,顺手google了一把,结果发现一个很巧妙的校验方法,以及一些关于这个时间重叠的一些资料。

就是下面这个了,比之前版本的代码4个if要看起来舒服很多

(StartA <= EndB) and (EndA >= StartB)

证明部分就不抄了,利用了集合论的一个公式:

非( p 或 q )等价于( 非 p )且( 非 q )。

那么如果要区分重叠的类型是如何呢, Allen’s interval algebra 定义了13种2个区间的关系。

另外, 这个stackoverflow的问题下面还列举了一些对上面的关系的扩展的库, Time Period Library,希望后面可以用到这个库。 感谢开源软件。

refs:

https://stackoverflow.com/questions/325933/determine-whether-two-date-ranges-overlap

https://en.wikipedia.org/wiki/Allen%27s_interval_algebra

https://www.codeproject.com/Articles/168662/Time-Period-Library-for-NET