【问题标题】:Is there a difference between float(x)/y and x/float(y)?float(x)/y 和 x/float(y) 有区别吗?
【发布时间】:2014-09-18 22:11:25
【问题描述】:
#include <iostream>
 using namespace std ;
  int main ()
  {

     int x,y ;
     x= 7 , y=3 ;
      cout<<float(x) /y << endl ; 

  }

float(x)/yx/float(y) 有什么区别?

【问题讨论】:

  • 绝对没有。要么将转换为float 以进行除法。

标签: c++ floating-point division


【解决方案1】:

有一个similar question involving uint8_t and bools in an arithmetic expression

该问题的答案也适用于此处,以及与floats 相关的以下附加信息。

5 种表达方式

9 许多需要算术或枚举操作数的二元运算符 化类型导致转换...

--否则,如果任一操作数为浮点数,则应转换另一个操作数 浮动。

两个操作数在除法之前都转换为float,结果是float类型。

【讨论】:

    【解决方案2】:

    您的问题没有实际区别。

    两个整数相除的结果是int(这称为整数除法,如果完全省略float 转换会得到什么);如果您然后转换为float,您仍然有int 结果,尽管是float。将floatint 相除的结果是float;所以你没有提升 int 结果到 float

    【讨论】:

      【解决方案3】:

      很少。对于float(x)/y,值x 将首先转换为float,然后再转换为double,而y 将直接转换为double。使用x/float(y)x 将直接转换为 double,而 y 将转换为 float,然后是 double。无论哪种情况,除法都将以double 执行,并打印double 结果。

      因此对于您的示例,没有区别,但如果 xy 更大(大于 224),则该值将略微四舍五入以适合 @ 987654336@ 如果它首先转换为 float。这将给出一个(非常)稍微不同的结果。

      【讨论】:

      • double d来自哪里?带有float 操作数的表达式在float 类型内求值。 float 不会提升为 double,除非其中一个操作数已经是 double
      • 它们可能(并且通常适用于所有嵌入式编译器除外)首先转换为双精度。
      • @ChrisDodd,C++ 标准另有说明(作为对两个操作数执行的通常算术转换的一部分)。 如果任一操作数是 long double 类型,则另一个应转换为 long double。 — 否则,如果任一操作数为双精度,则另一个应转换为双精度。 — 否则,如果任一操作数为浮点数,则另一个应转换为浮点数。
      • @Chris Dodd:该语言不会“将它们转换为double”。如果您在谈论一些特定于硬件的行为,那么它将是一些特定于硬件的内部表示(如 x86 平台上的 10 字节 FP 类型),而不是double。如果某些实现使用double 作为中间类型,那没关系,但这将是特定于实现的行为。
      • 谢谢你,克里斯·多德,但你能给我这个信息的来源
      猜你喜欢
      • 2013-09-18
      • 1970-01-01
      • 2019-12-12
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      • 1970-01-01
      相关资源
      最近更新 更多