偶在項目中需要利用到相關矩陣運算﹐矩陣元素需用到無窮大或無窮小的double型﹐哪位高手指點迷津﹐如何實現﹐謝謝﹗

解决方案 »

  1.   

    不太明白你的需求,是否可以使用一个非常大和非常小的double来表示呢?
    如果是绝对值,那么可以使用1e308表示无穷大,1e-308表示无穷小。
    如果不是绝对值,那么可以用-1e308表示无穷小。
      

  2.   

    不能用一个非常大和非常小的double来表示﹗
      

  3.   

    当然有本质区别但是你觉得无穷大的数可以表示吗?
    不说java,现实生活中有吗?
      

  4.   

    re:
     首先我不明白“相关矩阵运算”是什么,不知道是不是港台和大陆叫法不一样。
     其次,我认为如果不是符号计算的话,在运算过程中无穷大的数可以用有穷大的数表示,当然程序的正确性仰赖于你对这个充分大的数的选择的技巧。
     如果你能把无穷大的数用一个符号表示,那当然是再好不过的事情了,或许有可能可以实现一个包含无穷大、无穷小的表示有理数的类,为无穷大和无穷小的数定义他们的运算。不过我不明白为什么你明知double无法满足你的要求,而你似乎还在寻求怎么用double型来完成任务???
      

  5.   

    对呀,既然double不可以,为什么还用double呢?
    至少也要定义一个数据结构嘛,比如:
    class MyDouble
    {
        public double value;
        public boolean positiveInfinite;
        public boolean negtiveInfinite;
    }
    要么干脆使用字符串了。
      

  6.   

    还有,无线循环whilte(true)就是了。
    再有,程序中无法进行真的理论数值运算的,比如double类型的数据,精度只有15位有效数字,能满足你的要求么?加入需要对2开平方,你能接收用一个只有15位精度的数字表示2的平方根吗?如果能,那么为什么不能用10的300此方表示无穷大呢?
      

  7.   

    我不是所謂的港臺﹐是因為我的機子上沒有中文顯示﹐用老版本的南極星導致繁體我用floyd-warshall算法﹐當中用到矩陣之所以使用double﹐是因為此無窮大數要參與運算﹐比如說一個任務的完成時間上限定為無窮﹐隨着時間的推移﹐例如前進3毫秒﹐inf-3=inf﹐時間仍然要保持無窮﹐如果用個大數表示﹐終有結束的時候謝謝樓上的建議﹐但boolean無法參加運算了﹗
      

  8.   

    使用上面的方法,你可以让value随便减,这一点跟别的数值都是一样的,但你判断结束条件的时候,应该首先判断那两个bool值,如果不是正无穷,然后再判断数值就是了。
      

  9.   

    C#中可以表示,JAVA里面没有语言上的提供吧。
      

  10.   

    明確一下我的問題﹐假設一個任務的完成時間忽略不記(瞬間完成)﹐如這個任務的可執行時間區間為從現在開始計時的三秒後一直到正無窮﹐時間的最小單位為妙﹐如果用狀態空間來描述這個任務﹕可描述如下﹕
    [3  inf]-->[2  inf]-->[1  inf]-->[0  inf]--|  最後為一循環﹐此圖中只有四個狀態﹕
                                          ^| __|
    我找到一篇文章這樣些﹕从数学的角度说无穷大只是一个过程,不是一个数
    具体的在Java中,Integer类里面并没有定义所谓的无穷大数。
    在Double中
    Double.POSITIVE_INFINITY == Double.longBitsToDouble(0x7ff0000000000000L)
    Double.MAX_VALUE == Double.longBitsToDouble(0x7fefffffffffffffL)在這種情況下﹐ 此任務的狀態空間圖將有0x7ff00000個狀態。因此欲尋求一種方法表示無窮的概念﹗
      

  11.   

    另外我想知道POSITIVE_INFINITY和MAX_VALUE是否有區別﹖
      

  12.   

    Double.MIN_VALUE 正无穷大 Double.POSITIVE_INFINITY 负无穷大
      

  13.   

    我觉得楼主还是想入死角里去了,你应该认识到两件事:
    (1)Java有丰富的类型系统,和强大的流程控制功能,只要是确定的逻辑过程,基本没有Java无法表示的。
    (2)对于数值类型来说,所有的语言本身都无法直接表示无穷大,因为数值类型的精度、范围直接依赖于字长,而暂且不说CPU的字长,即便你用所有的内存加所有的硬盘空间用来表示一个整数,它还是一个有限的数。
    (3)再从数学的角度分析,“无穷大”本身就不是一个值,不是int,也不是double,更不是char。再一定程度上,可以认为“无穷大”是一个永不退出的函数,或者是一个永真的循环控制变量。
      

  14.   

    我是学数学的,在这里说点什么看这个 :求所有整数之和?也许有人说:0 因为  ...(-2+( -1+ 0+1)+2)...但是我说:不知道 因为 你可以任意的括上括号:
     变成 0 + 1+((-1)+2)+((-2)+3) +((-3)+4).......((-n)+(n+1))
    得多少?
    n是不确定的,无穷大?无穷大有多大?这好像永远到底有多远一样啊再说,从机器的方面说,还是看steedhorse(晨星)说的吧
      

  15.   

    楼主实在没办法就自己写一个解析和计算的过程
    然后标记一个符号来表示无穷!比如:MaxNum
    然后规定:1:MaxNum加减任何数 =MaxNum
    2:MaxNum乘除任何正数=MaxNum
    3:MaxNum乘除任何负数=(负)MaxNum
    4:任何数除以MaxNum = 0
    5:MaxNum / MaxNum =? //不确定,出错
    6:MaxNum * 0 = ? //不确定,出错
    7:任何正数数除以 0 =  MaxNum
    8:任何负数数除以 0 =  (负)MaxNum
    呵呵~~~~
      

  16.   

    首先先謝謝樓上的熱情討論,我做的东西比较理论,但也没有也不可能上升到哥德巴赫猜想的高度,因为数学的东西还是不很多;我想我的上一个帖子已经把问题描述的比较清楚了,我作它主要是为了模拟时间序列集成电路,specification and verification 的一种形式化方法,需要构建状态空间图,构建的简单例子我上面已经描述了,我可能把大家误导了,但楼上的方法我想了想,应该行的通!ps:不要看前面的繁体字就以为是日本人,抗日不要抗错方向了,繁体字是中国文化的瑰宝!