分类目录归档:记录

IEEE 754 的 inf 比较问题

首先上结论: 当涉及浮点数比较时,一定要考虑比较符号两侧都是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

CSAPP-记录

  • Question In CSAPP:
    • switch比if-else高效吗?
    • switch可能更高效,比较相关的开销移动可能会移动到编译期.
    • while比for高效吗?
    • 二者相同
    • 指针比数组索引更高效吗?
    • 二者相同
    • 为什么在求和时,将结果存在本地变量中要比存储在传入的指针中更快?
      • 本地对象一般是在寄存器中, 而通过指针IO时,可能会触发内存操作
    • 为什么表达式的求值顺序会影响性能(括号的位置)
      • 限定求值顺序会影响编译器的优化.
      • 限定求值顺序有可能会改善内存访问的模式.
    • 函数调用的开销到底有多大?
    • 现代编译器中,一般可以忽略,部分toolchain甚至有链接期inline的机制.(用栈来模拟递归通常是得不偿失的,损失的可读性要远大于性能的微弱提升)
    • 主要是需要避免系统调用,系统调用将触发context switch
    • 为什么有些链接错误是在运行时触发的?
Read More

KD树与SKD树

KD树与SKD树

首先给出两个搜到的有点内容的KD树文章,论述的比我说的更完整(更冗长),可以先看,也可以看完本文再看.
* https://www.zybuluo.com/l1ll5/note/967681
* http://www.whudj.cn/?p=920

主体思想

  • KD树和SKD树都使用坐标轴对齐的最小包围盒来描述空间.
    • 例如,平面内,一堆点的点集对应的空间可以用点A=(min(all_x),min(all_y)),B=(max(all_x),max(all_y)) 对应的矩形空间来描述. 当点的个数变为1时,这个矩形空间也会自然地退化为一个点.
  • 构建时的主要思想: 每个节点
Read More

设计模式

For C/C++ user

很多设计模式相关的资料都是用Java来描述的,有必要简单补充一下JavaC++OOP技术层面上的区别

  • Java不支持任何形式的运算符重载
  • Java明确区分接口和类,类只能从一个类派生,但是一个类可以实现多个接口
  • 在Java中,所有方法默认是虚(virtual)的
  • 对CPP而言,Java风格的接口可以视为一个只有pure virtual
Read More

QT5编程基础

QT Module中的Qt Core和Qt GUI是唯二有必要仔细学习的部分, 这两部分涉及了QT的所有核心功能, 其余部分都可以在此基础上现学现卖.

本文主要介绍QT中比较重要的机制,其他知识相对来说都很独立,可以直接现学现用.

QT开发基础

  • Qt的很多特性都使用到了thread_local变量, 在多线程环境中,与QObject相关的功能只有两种保险的策略.
      1. 不直接跨线程使用QObject对象
      1. QObject
Read More

多线程编程-杂

重要的两个类型BlockingQueueCountDownLatch

  • 在我目前有限的实践中,这两个类型及其简单变种解决了至少90%的问题.
  • 这两个类的实现代码都非常简单.
  • BlockingQueue主要用于在线程之间传递数据.
  • CountDownLatch主要用于多个线程的简单同步控制.例如,Thread Fence (类似于CUDA的__syncthreads) 就可以通过CountDownLatch 实现.
// 这只是个最简单的例子,你可以依据自己的场景来修改其API
Read More

Google NCR ZH

因为一些众所周知的原因,我们不希望使用中文版的谷歌,但是往往又希望中文界面.以下面的链接作为查询网址即可

https://www.google.com/ncr#hl=zh-CN&q=%s
Read More