什么情况下可能出现如下的奇怪有关问题

什么情况下可能出现如下的奇怪问题
问题:
1、最近在写一个程序的时候定义了一个类似如下的类
Public Class ClassElement
    Public Node_1, Node_2, Node_3, Node_4 As ClassNode '本单元的4个节点
    Public Element_Left, Element_Right, Element_Up, Element_Down As ClassElement '本单元相邻的左、右、上、下4个单元
    Public Stress_X As Double 'x方向应力
    Public Stress_Y As Double 'y方向应力
    Public Stress_XY As Double 'xy方向剪切应力
    Public S_X As Double 'x方向偏应力
    Public S_Y As Double 'y方向偏应力
    Public FirstPrincipalStress, SecondPrincipalStress As Double '第一第二主应力
    Public Strain_x, Strain_y, Strain_xy As Double '应变
    Public Temperature As Double '温度
    Public ElementType As Int16 '材料类型
    Public Area As Double '单元面积
    Public m As Double '单元质量
    Public Density0 As Double '单元最初始时刻的密度
    Public Density As Double '单元当前密度
    Public FailType As UInt16 '单元失效类型,0没有失效,1剪切失效,2拉伸失效
    Public StrainRateX1, StrainRateX2 As Double 'x方向的应变率,StrainRateX1表示上一个时刻的应变率,StrainRateX2当前时刻的应变率
    Public StrainRateY1, StrainRateY2 As Double
    Public StrainRateXY1, StrainRateXY2 As Double
    Public P As Double
End Class

2、当我New了一个上面这种类的变量的时候,比如
Dim temp As New ClassElement
,这个时候我写了一个函数,其中函数里边参与运算的只有temp的成员Stress_X、Stress_Y,而temp里的成员Density只被接受赋值,而不参与具体的运算.但是问题就出来了,当Density成员赋不同的值的时候,我写的函数也返回相应不同的值.也就是说Density在没有参与运算的情况下,却对我的函数是有影响的。类似如下一种情况
Public Function test(ByRef temp As ClassElement, ByRef P As Double) As Double
        temp.Density = P
        '这个地方如果temp.Density赋值其它的数据的话,函数的返回值就会有所变化
        temp.Stress_X = -P
        temp.Stress_Y = -P
        Return temp.Stress_X + temp.Stress_Y
    End Function

3、我已经检查了多次我的代码,都不存在以Density成员参与运算的情况.

4、我想请问下,什么情况下可能出现上面一个成员不参与运算的情况下,还能影响其它函数功能的情况呢!

PS:有时候程序确实会出现一些自己意想不到的问题.记得以前在调试一个简单的程序的时候,结果总是错误的,自己在算法上检查了半天也没有找出错误.最后跟踪程序才发现,计算机里一个1/2它显示的是0.4999999999989而不是0.5,我当时郁闷了半天,因为如果是1/3的话出现0.333333333333333的情况我还能理解.而1/2也出现那种情况,我当时无语了。奇怪的是,在第二天进行调试的时候,1/2它居然显示的是0.5。呵呵,这个世界真奇妙!好了,如果您能帮忙,麻烦敲几个字,简单回答下我上面的问题吧!
奇怪的问题

------解决方案--------------------
看起来貌似没什么问题,建议关闭程序,重启电脑!什么情况下可能出现如下的奇怪有关问题
------解决方案--------------------
使用浮点数据类型(single或者double)要注意
因为这些数据类型是有精度限制的,正如你上面说的1/2=0.4999999999989
不同类型精度不一样,浮点数最高精度好像是15位,也就是说只要满足精度要求他都是对的
如果不想这些造成问题,最好使用Decimal数据类型,这个尽管占用空间大点
但只要不是循环小数,绝对精确.
------解决方案--------------------

把函数作如下修改试试:
Public Function test(ByRef temp As ClassElement, byval P As Double) As Double