假设float a = (1.5 * b)
其中b
是float,那么这个表达式是如何评估的? 1.5
被视为double或float?在Visual C++中如何将浮点文字处理为double或float?
2
A
回答
5
1.5是双,采用1.5F浮法,其实际作用:
float a = (float)(1.5 * (double)b)
3
1.5
是浮点文字,双重价值。 C++ 03 2.13.3 Floating literals
有这样说:
一个浮动文本由一个整数部分,一个小数点,一个小数部分,电子或E,任选符号整数指数,和一个可选的类型后缀组成。 ...除非通过后缀明确指定,浮点文字的类型是双精度的。
13.3.3.1 Standard conversion sequences
第13.3.3.1 Standard conversion sequences
号定义了处理转换的方式,但在这里重复要稍微干燥。只需说浮点数提升已完成,并且部分4.6 Floating point promotion
指出:
float类型的右值可以转换为double类型的右值。价值不变。
因此,float b
被提升为一个double来执行乘法。
然后,使用(有效)临时double
执行计算,结果是回到float a
。
因此,有效:
float b = something;
double xyzzy0 = 1.5;
double xyzzy1 = (double)b;
double xyzzy2 = xyzzy0 * xyzzy1;
float a = xyzzy2;
这最后一步可能是有问题的。部4.8 Floating point conversions
(其不包括像float
到double
更安全促销)规定:
浮点类型的右值可以被转换成另一种浮点类型的右值。如果源值可以在目标类型中精确表示,则转换结果就是该确切表示。如果源值位于两个相邻目标值之间,则转换结果是这些值中任一值的实现定义选项。否则,行为是不确定的。
作为浮点升级允许的转换不包括在浮点转换集中。
换句话说,如果乘法结果超出浮动范围的值,则所有的注单都关闭。如果b
约等于浮动的最大绝对值的67%(正值或负值,无关紧要),则很可能会发生这种情况。
相关问题
- 1. C++如何将int整型为float/double?
- 2. 如何在printf中处理float/double转换为int?
- 3. 如何将字节数据转换为double或float?
- 4. 如何在将列表中的文字转换为浮点时处理异常?
- 5. 将c#float转换为IEEE单精度浮点字节
- 6. 将double [] []转换为float [] []
- 7. 将double转换为float?
- 8. mysql将float转换为double
- 9. 如何将uint32_t转换为double或float并打印?
- 10. 如何处理浮点数
- 11. 不能将float或double转换为字符数组(sprintf)
- 12. c中的float和double#
- 13. 浮点数组,float []和double []是不同的,还是相同的?
- 14. 将字符串[]转换为十进制[],int [],float [] .double [] in c#
- 15. 如何在c#中将面板的大小设置为float/double数据类型?
- 16. C++如何处理const double&引用int?
- 17. float或double特殊值
- 18. 如何将字符串(带前缀的数字)转换为JS中的Double/Float
- 19. 在C中读/写浮点类型时,如何处理字节顺序差异?
- 20. 如何将“0.0000e + 000”解析成float/double?
- 21. 如何将字符串转换为浮点数在objective-c
- 22. Python如何为float/double工作?
- 23. C-structs,NSObjects,float,int,double,
- 24. 为什么eclipse报告将float错误从float转换为double
- 25. c#BitConverter.GetBytes(float/double)格式?
- 26. 将64Bit Double转换为32Bit Float Node.Js
- 27. 将python转换为java float vs double
- 28. JAVA-如何播放音频声音表示为float []或double []
- 29. 在Lua中将字节数组转换为浮点数[Float Data Structure]
- 30. Flex中的double或float数据类型?