问题是
float
不够精确,不足以在一秒钟后区分一个时间戳和一个时间戳。坚持
double
;这是有原因的
CFAbsoluteTime
使用那种类型。
下面是64位10.6.4下的问题演示:
val: 311721760.000000 - val2: 311721761.000000 - (val2 - val): 1.000000
v: 311721760.000000 - v2: 311721760.000000 - (v2 - v): 0.000000
使用的第一行
双重的
价值观;
val2
是通过添加
1
到
val
. 使用的第二行
浮动
价值观。源代码如下:
//clang so_float.m -o so_float
#import <stdio.h>
int
main(void) {
double val = 311721760.000000;
double val2 = val + 1.0;
fprintf(stderr, "val: %f - val2: %f - (val2 - val): %f\n", val, val2, val2 - val);
float v = val;
float v2 = val + 1.0;
fprintf(stderr, "v: %f - v2: %f - (v2 - v): %f\n", v, v2, v2 - v);
return 0;
}