Mixin
Mixin是一种设计思想, 主要内容是: Mix some MixinClass into a CoreClass, so the CoreClass can get some new feature, or get enhanced.… Read More
Mixin是一种设计思想, 主要内容是: Mix some MixinClass into a CoreClass, so the CoreClass can get some new feature, or get enhanced.… Read More
Lit
和 FileCheck
是 LLVM 测试中常用的工具, 尽管二者功能上是完全独立的,但是搭配起来使用会显得更加方便.
Lit
总的来说仅仅是一个 test-launcher, 它的主要功能就是发现测试,执行测试,收集结果.
"发现测试"主要依赖于lit.cfg
(或lit.site.cfg
)文件标记来实现. … Read More
惭愧,突然发现又是没有blog的一年。这一年不断在尝试搞大新闻,写点大东西,到现在也没憋出来。倒是又在学习新东西的过程中看到了一些零碎的小知识,很有意思.
很巧,这个也是和比较运算符相关的,和一年前的blog竟然有所重合。
还是先上结论: 当需要为类型T定义比较运算符时,所有运算符最好保证语义整体一致
* 一般来说,这很容易达到,我们只需要实现operator<(lhs,rhs)
,即可引申定义出其余几个比较运算符.
* 定义operator<=
为 !(rhs < lhs)
* 定义operator>
为 rhs
… Read More
首先上结论: 当涉及浮点数比较时,一定要考虑比较符号两侧都是inf的情况.
原因: inf==inf,inf<=inf,inf=inf 这三个比较都为真(-inf同理),而这种结果可能与我们的期望不符.
解决方法:
1. 如果为真是可以接受的,那么直接使用比较运算符,例如a<=b
2. 如果为真是不可以接受的,那么应当使用作差,例如(a-b)<=0
, 这种情况下,当a和b都为inf时,inf之间的运算会输出NaN,从而导致比较结果为false
例如,我有这样一个应用场景:
有射线R和两个平面S0及S1,我们需要求射线R与平面S0的交点p0,以及射线R与平面S1的交点P1. 且要求p0不能比p1离射线起点更远(可以重合)
假如我们用直线的参数方程来描述交点,显然,上面的目标很容易用 t0<=t1 … Read More
首先给出两个搜到的有点内容的KD树文章,论述的比我说的更完整(更冗长),可以先看,也可以看完本文再看.
* https://www.zybuluo.com/l1ll5/note/967681
* http://www.whudj.cn/?p=920
A
=(min(all_x),min(all_y))
,B
=(max(all_x),max(all_y))
对应的矩形空间来描述. 当点的个数变为1时,这个矩形空间也会自然地退化为一个点.很多设计模式相关的资料都是用
Java
来描述的,有必要简单补充一下Java
和C++
在OOP
技术层面上的区别
Java
风格的接口可以视为一个只有pure virtual
=
是右结合的,这和<<
是完全不同的,a=b=c
意味着a=(b=c)
,b=c
将先执行,而a<<b<<c
则是(a<<b)<<c
,a<<b
将先执行.… Read MoreC++标准库提供的 mutex 在大部分场合都足以保证线程安全, 但是当问题变得更加极端时,就可能需要使用lockfree风格的并行编程了. 而为了正确实现lockfree, 你将打开一扇新的大门, 接下来的名词都是在学习过程中必须正确理解的: memory model, reordering, weak(relax), strong(strict), fence, barrier, release, acquire, seq_cst, consume, mutex, futex,