2

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

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

4 回答 4

3

任何执行您想要的操作的编译器都不再是符合标准的 C++ 编译器。整数除法的语义已明确指定(至少对于正数),并且您建议更改它。

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

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

于 2010-03-15T20:54:47.257 回答
2

如果您不喜欢您提到的两种方法中的任何一种,那么您可能不走运。

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

于 2010-03-15T18:48:12.213 回答
2

在 C++ 中,看到一堆数字值散布在代码中有点奇怪。通常,将任何像这样的“幻数”移动到它们自己的静态 const 浮点值被认为是最佳实践,这样可以解决这个问题。

于 2010-03-15T19:51:07.977 回答
1

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

于 2010-03-15T19:19:56.887 回答