隐式转换整数计算在C ++中浮动

时间:2010-03-15 18:41:48

标签: c++ floating-point integer implicit-cast compiler-directives

是否有任何编译器具有指令或参数来将整数计算强制转换为浮动。例如:

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”的情况下执行此过程吗?

4 个答案:

答案 0 :(得分:3)

任何做你想做的编译器都不再是一个符合标准的C ++编译器。整数除法的语义很明确(至少对于正数),你建议改变它。

它也会很危险,因为它会最终应用于所有内容,并且您可能在某些时候拥有依赖于标准整数运算的代码,这些代码将无声地无效。 (毕竟,如果你有测试可以捕获它,你可能会有测试,可以捕获不需要的整数运算。)

所以,我唯一的建议是编写单元测试,进行代码审查,并尝试避免使用幻数(而不是将其定义为const float)。

答案 1 :(得分:2)

如果您不喜欢上述两种方法中的任何一种,那么您可能会运气不好。

你希望用这个来完成什么?任何执行“浮点除法”的专业运算符都必须在标记化后的某个时刻将int转换为浮点数,这意味着您不会在执行时获得任何性能优势。

答案 2 :(得分:2)

在C ++中,看到代码中散布着一堆数字值有点奇怪。通常,最好的做法是将这些“魔术数字”移动到它们自己的静态const浮点值,这样可以消除这个问题。

答案 3 :(得分:1)

不,这两个选项是你最好的选择。