2008-11-12 31 views

回答

5

您是否尝试过比较IL(例如,与Reflector)?

static double A(int numerator, int denominator) 
{ return (double)numerator/denominator; } 

static double B(int numerator, int denominator) 
{ return numerator/(double)denominator; } 

static double C(int numerator, int denominator) 
{ return (double)numerator/(double)denominator; } 

所有这三个成为(给予或自己取的名字):

.method private hidebysig static float64 A(int32 numerator, int32 denominator) cil managed 
{ 
    .maxstack 8 
    L_0000: ldarg.0 // pushes numerator onto the stack 
    L_0001: conv.r8 // converts the value at the top of the stack to double 
    L_0002: ldarg.1 // pushes denominator onto the stack 
    L_0003: conv.r8 // converts the value at the top of the stack to double 
    L_0004: div  // pops two values, divides, and pushes the result 
    L_0005: ret  // pops the value from the top of the stack as the return value 
} 

因此,没有:有确切零差价。

1

即使您使用VB.NET,分子和分母都会在进行实际分割之前转换为双精度,因此您的示例是相同的。

相关问题