漂浮用C隐式铸造整数计算++
-
20-09-2019 - |
题
是否有具有指令或投整数计算来隐式地漂浮的参数的任何编译器。例如:
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 ++它是一个有点奇怪看到一堆通过代码洒数值。通常它被认为是移动任何“幻数”这样的自己的静态常量浮点值,从而消除这一问题的最佳做法。
没有,这两个选项是你最好的。
不隶属于 StackOverflow