【发布时间】:2011-01-27 19:40:56
【问题描述】:
是否有任何编译器具有将整数计算转换为隐式浮点的指令或参数。例如:
float f = (1/3)*5;
cout << f;
“f”是“0”,因为计算的常量(1、3、10)是整数。我想用编译器指令或参数转换整数计算。我的意思是,我不会像这样使用显式转换或“.f”前缀:
float f = ((float)1/3)*5;
或
float f = (1.0f/3.0f)*5.0f;
你知道任何 c/c++ 编译器有任何参数来执行这个过程而无需显式转换或“.f”吗?
【问题讨论】:
-
如果你能做到这一点,你将改变底层语言的语义——这通常不是一个好主意。也许您会更喜欢一种完全不同的编程语言,它具有更符合您口味的 int/float 表达式语义?
-
顺便说一句:在第二种情况下,只有常量
1和3之一需要为浮点数。另一个常量和5会自动提升。此外,您不需要将它们定义为float,双打将被隐式降级为浮动:float f = (1.0 / 3)*5会成功(或5.0/3)。 -
@David:“5 会自动提升”,我的印象是当小于 int 的整数常量转换为 int 时,我们说它们被“提升”,但在所有其他情况下,我们只需说“转换”即可。
-
@Alexandros Gezerlis:你是对的。我误用了“促进”这个词。有积分提升和浮点提升(从
float到double),但是当涉及积分和浮点时,它们被称为“转换” -
如果你不喜欢额外的.0f,就用f。 (1f/3f)*5f - 这很明显,但不碍事。就像其他人说的那样,(1f/3)*5 也可以。
标签: c++ floating-point integer implicit-conversion compiler-directives