正如John所说的带小数点的数字默认为双倍。 TomTom是错误的。
我很想知道编译器是否会优化double float到const float(我认为会发生这种情况)......事实证明它并不是,速度增加的想法实际上是合法的......取决于你使用它的多少。在数学量大的应用程序中,您可能确实想要使用这个技巧。
它必须是这样的情况,它将存储的浮点变量,将其转换为double,对double执行数学运算(没有f的数字),然后将其重新转换为浮点数再次存储。这将解释计算上的差异,即使我们每次都在浮游物中存储。
代码&原始结果: https://gist.github.com/1880400
掏出有关的基准在iPad 1在调试配置文件(版本导致了更加性能增加通过使用F符号):
------------ 10000000 total loops
timeWithDoubles: 1.33593 sec
timeWithFloats: 0.80924 sec
Float speed up: 1.65x
Difference in calculation: -0.000038
代码:
int main (int argc, const char * argv[]) {
for (unsigned int magnitude = 100; magnitude < INT_MAX; magnitude *= 10) {
runTest(magnitude);
}
return 0;
}
void runTest(int numIterations) {
NSTimeInterval startTime = CFAbsoluteTimeGetCurrent();
float d = 1.2f;
for (int i = 0; i < numIterations; i++) {
d += 1.8368383;
d *= 0.976;
}
NSTimeInterval timeWithDoubles = CFAbsoluteTimeGetCurrent() - startTime;
startTime = CFAbsoluteTimeGetCurrent();
float f = 1.2f;
for (int i = 0; i < numIterations; i++) {
f += 1.8368383f;
f *= 0.976f;
}
NSTimeInterval timeWithFloats = CFAbsoluteTimeGetCurrent() - startTime;
printf("\n------------ %d total loops\n", numIterations);
printf("timeWithDoubles: %2.5f sec\n", timeWithDoubles);
printf("timeWithFloats: %2.5f sec\n", timeWithFloats);
printf("Float speed up: %2.2fx\n", timeWithDoubles/timeWithFloats);
printf("Difference in calculation: %f\n", d - f);
}
其实 “1.0” 是乌苏盟友视为双重而不是浮动。 – 2010-03-08 15:56:39