Code

2010年9月11日星期六

About Epsilon

前几天去cs4213的lab,做了一个dotproduct的问题,然后跟cosine对比结果。我当时用了"==",对比结果老是不对然后问TA。他说要用epsilon,我不知道是什么,问了好几遍什么是epsilon。最后TA懒得跟我解释就说,你不能这样直接比较,会有error,然后我就用">"比较,最后终于弄对了。

今天突然想起那天他说的epsilon,然后查了一下。原来这是一个学computing都应该知道的东西(汗~~)。这个跟floating point 的precision有关系,下面是从msdn上摘下来的:

Output
The difference between 1 and the smallest value greater than 1
 for float objects is: 1.19209e-007
The difference between 1 and the smallest value greater than 1
 for double objects is: 2.22045e-016
The difference between 1 and the smallest value greater than 1
 for long double objects is: 2.22045e-016

这是machine representation for floating number的局限性。又查了一下,比如说0.1011用十进制是 1/2 + 1/8 + 1/16也就是0.6875。机器能够精确表示的浮点数只有像0.5, 0.25, 0.75, 0.625...和他们的linear combination。这样float是32位,double是64位,long double是128位,他们能表示的最小数就不一样了。

所以在比较浮点数的时候要计算误差,这个误差就叫做epsilon。误差在一定的范围内了,就可以看作是相等了。

从上面可以看出来,float type的误差是在0.0000001和0.0000002之间的。所以epsilon应该是大于0.0000001的,不然就有可能永远无法接近正确值。    这个也是从网上找来的:

#define EPSILON 0.0001  // Define your own tolerance
#define FLOAT_EQ(x,v) (((v - EPSILON) < x) && (x <( v + EPSILON)))
int main()
{
  float a = 2.501f;
  a *= 1.5134f;
  if (FLOAT_EQ(a, 3.7850)) cout << "Expected value" << endl;
  else cout << "Unexpected value" << endl;
}

总结就是,今后做floating point comparison要用epsilon。

2010年9月9日星期四

static variables

今天花了一天的时间教自己了static variable

  1. static variable 自动 initialize to NULL(0)
  2. static variable can pointer to a constant or variable. When pointing to a variable, that variable must be static. Same rule applies to that variable.
  3. when return a value to a static variable from a function or method, the return value should be assigned to a static variable in that function.
  4. VC++ won't tell you your static variable contains rubbish, when it points to a non-static variable.


很简单的一个问题,弄了我一天。这个在eclipse 里面用java写都会有错误提示。

2010年9月8日星期三

王杰新加坡演唱会


跟小猫一起买了10月23号王杰演唱会的票,虽然票价有点贵,但花了这个钱心中还是小有点兴奋与期待的。

据报道,王杰承诺会唱这么几首老歌:《一场游戏一场梦》、《忘了你,忘了我》、《是否我真的一无所有》、《为了爱,梦一生》、《你是我胸口永远的痛》、《谁明浪子心》、《安妮》。这些都是我来新加坡后买的那一套两盘专辑里面的歌,在RI两年我经常听那些老歌,它们每首都充满了一种沧桑感,很朴实,很喜欢。现在有一张不小心弄掉了,剩下另一张我刻在了电脑里。

要是王杰也会唱《回家》就好了,这首我经常唱歌小猫听,她现场听到原唱一定会很高兴的。很期待到时跟着王杰一起哼唱这首歌。我总是在想,我们这些在外漂泊的人其实很可怜,平时不会觉得,唱起这首歌的时候就会觉得。我们还是挺希望有一个安稳的家的。但我是吃得了苦的人,爱听王杰的歌,是因为他的经历比我更苦,他的声音可以让我得到心灵的呼应,在生活中更坚强。小猫也应该多听王杰的歌,呵呵。

我会一直喜欢他的歌,他现在应该才50岁左右,还有很多年可以唱。加油王杰,加油小猫。