比如我现在是
double MyRate(double m)
{
double mr = 0.0;
if(m==1.0)
{
    mr = 0.9144*0.9144;
}
return mr;
}
这里函数编译后是mr = 0.9144*0.9144;还是直接mr = 常数(即0.9144*0.9144的结果);?大侠们,知道的指点一二。

解决方案 »

  1.   

    自己做试验不可以吗?
    可以用reflector,也可以用ildasm来查看。
      

  2.   

    public const double CONSTNUM = 0.9144*0.9144;   //常量名称一般大写double   MyRate(double   m) 

       double   mr   =   0.0;
       if(m==1.0) 
       { 
            mr   =   CONSTNUM;                     //常量只能引用,不能改变它的大小 
       } 
    return   mr; 

      

  3.   

    本帖最后由 caozhy 于 2011-08-03 19:04:39 编辑
      

  4.   

    因为 CPU 只能操作内存里面的数据(对于 RISC 计算机来说,除了load/stor指令,CPU只能操作寄存器),所以从CPU的角度看,它根本不知道这个数是常数还是什么变量。如同你不能从你家信箱里面收到的包裹知道它是汽车送来的还是自行车送来的。
      

  5.   

    我大概了解二进制整数怎么存的,但是循环小数是可以存到double类型里面的,比如double a = 1.0/3.0;
    double b = a *3.0;
    调试的结果肯定是b位1.0,如果a只是存近似值的话,b的值等于a的值乘以3不会是1.0,所以,4楼说只能是近似值我不同意,我觉得是一种机制能表示无线循环小数。 
      

  6.   

    就是说,如果a=1.0/3.0中的a是近似值的话,b等于a乘以3.0还会是1.0吗,
      

  7.   


    这些问题没有什么同意不同意的,你可以很容易验证:用ildasm可以反编译看到编译后产生的结果。至于验证浮点误差的存在,给你个程序:
    double a = 2.0;
    double b = 0.003;
    double c = a - b;
    double d = a - c;
    Console.WriteLine(d);不要用学习人文的方法学习自然科学,计算机作为客观存在的事物不是说你同意就如何,你不同意就如何。如同我不同意万有引力,我就能飞起来么?提出问题是好的,但是漫无目的的空想还不如打好基础。这些基本概念并不需要你去猜测探索,书上都有(而且书上都告诉你怎么去求证)。
      

  8.   

    谢谢大侠,不过这个误差是怎么表现啊,你把d.toString()加上呢,我加上string c = d.toString()还是e还是0.03,没写过控制台程序,直接用的控件,基础薄弱啊,限于阅读的书有限,还是在这里请教了,呵呵。不过d后面却是有一部分是不精确的,0.03000...027中间省略n个0,你说的误差是这个27把,toString()后还是0.03啊,不影响结果,那个il查看我也不会,劳烦大侠帮看看,是怎么存储的常量表达式
      

  9.   

    我写了个Console程序,打印0.03的,呵呵