是否有具有指令或投整数计算来隐式地漂浮的参数的任何编译器。例如:

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”的事情吗?

有帮助吗?

解决方案

如果你不喜欢或者你提到的两种方法,你很可能出于运气。

什么是你希望这个来完成?这并“浮师”任何专门的运营商将不得不转换为整数符号化之后的某一点,这意味着你不会得到执行任何性能上的提高浮动。

其他提示

任何编译器,就梦想将不再是标准的C ++编译器的东西。整数除法的语义是公指定(至少对于正数),而你提议改变这一点。

这也将是危险的,因为它也将结束适用于一切,你可能会在某个时候有依赖于标准的整数运算,这将默默地无效代码。 (毕竟,如果你有这将赶上测试,你大概就会有一个会赶上不需要的整数运算测试。)

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

在C ++它是一个有点奇怪看到一堆通过代码洒数值。通常它被认为是移动任何“幻数”这样的自己的静态常量浮点值,从而消除这一问题的最佳做法。

没有,这两个选项是你最好的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top