我对将f
放在字面值旁边有一些疑问。我知道它将其定义为float
,但我真的需要它吗? 这是2.0f * 2.0f
更快或编译任何不同于2.0 * 2.0
?像float a = 2.0;
这样的陈述与float a = 2.0f;
的编译方式不同吗?2.0和2.0f之间的区别(显式浮点数和双字面值)
回答
有时你需要明确有型float
,如以下情况
float f = ...;
float r = std::max(f, 42.0); // won't work; (float, double).
float r = std::max(f, 42.0f); // works: both have same type
我很少关于速度(至少直接),但事实上否则编译器会警告将double
转换为float
。
好吧,但在a * 2.0的例子是真的使用双倍? – 2010-09-12 22:25:30
从理论上讲,我认为这应该会导致两个'double'的乘法,即将结果转换为'float'。实际上,在2.0的情况下,编译器可能/会发现它可以在整个过程中使用'float'。 OTOH,在优化FP数学方面有强制性的限制(特别是在C99中),所以明确规定可以提供帮助。 – 2010-09-12 22:29:45
是的我只是用2.0作为例子。谢谢您的帮助。 – 2010-09-12 22:34:44
据我所知,在“正常”的PC(X86与x87般的数学协处理器),在速度上的差异是无关紧要的,因为无论如何,这些计算都是以80位精度完成的。
当您需要管理大量浮点数字(科学计算或类似的东西)时,浮点数可能会变得很重要,因此使用较小的数据类型可能会很方便,既可以使用更少的内存,也可以更快地读取他们从RAM /磁盘。
在缺乏浮点单元的机器(例如大多数微控制器)上使用浮点数而非双精度浮点数也是有用的,其中所有的浮点算术运算都是由编译器插入的代码在软件中执行的;在这种情况下,运行在浮点上的速度可能会有所增加(并且在这样的环境中,往往也是每一点存储都很重要)。
在PC上,IMO可以在“正常”上下文中使用double,只是为了避免在同一表达式中混合使用数据类型(double,float,ints,...)以避免不必要的昂贵转换。无论如何,使用文字编译器应该足够聪明,可以在编译时执行转换。
是的,我正在使用iphone。 – 2010-09-12 22:34:04
由于我读过,iPhone处理器是一个ARM1176,并提供了可选的FPU(请参见:http://www.arm.com/products/processors/technologies/vector-floating-point.php);我不是这方面的专家,但我不认为在这种情况下,花车/双打的速度变化很大。我唯一担心的是它有“16个双精度或32个单精度寄存器”,所以只使用浮点数可以从附加寄存器中获得一些东西,但也可能取决于环境的设置方式。 – 2010-09-12 22:37:02
嗯,我知道你可以,但在iPhone双重肯定是慢的然后浮动。 – 2010-09-12 22:39:15
- 1. 硬浮点数和软浮点数之间有什么区别?
- 2. 浮点变量和双变量数据类型之间的区别
- 3. NMock 2.0和NMock2之间的区别
- 4. CLR 2.0和CLR 4.0之间的区别
- 5. ActionScript 2.0和3.0之间的区别...?
- 6. Doctrine 1.0.7和Doctrine 2.0之间的区别?
- 7. DLNA 1.5和2.0之间的区别
- 8. 区分浮点和双重
- 9. 浮子之间和双
- 10. C中的双**和双(*)[2]之间的区别
- 11. rm和mp3格式之间的区别
- 12. “。”之间的区别和 “$” 表达式
- 13. 单指针和双指针数组之间的区别
- 14. 对象和字典之间的区别?
- 15. 来源和字段之间的区别
- 16. memcache和python字典之间的区别
- 17. $ HOME和'〜'(代字号)之间的区别?
- 18. 地图和字典之间的区别
- 19. 隐式和显式事务之间的区别
- 20. '+ ='和'= +'之间的区别?
- 21. {!!之间的区别!!}和{{}}
- 22. ==和case之间的区别?
- 23. '#','%'和'$'之间的区别
- 24. | =和^ = css之间的区别
- 25. “%〜dp0”和“。\”之间的区别?
- 26. .eq之间的区别。和==
- 27. ==和.equals()之间的区别?
- 28. `%in%`和`==`之间的区别
- 29. 参数和参数之间的区别
- 30. {参数}和参数之间的区别?
你的意思是“文字值”,而不是“变量名”。 '2.0'是一个'double'字面值。 '2.0f'是一个'float'字面值。 '2'是一个'int'字面值。这些都不是变数。 – RBerteig 2010-09-12 22:30:23
@RBerteig我的坏:) – 2010-09-12 22:33:01
对不起,并不意味着听起来像我在那里咆哮......我可能应该静静地编辑尸体。 – RBerteig 2010-09-12 22:44:47