有沒有人知道一個無理數的表示類型/對象/類/無論在任何編程語言?任何編程語言中的非理性數字表示?
歡迎任何建議。
簡而言之,如果我有兩個非理性的對象,都代表五的平方根,並且我將這些對象相乘,我想取回整數5,而不是浮點4點。
具體而言,我需要表示法能夠收集術語,而不是每次都解析爲整數/浮點數。例如,如果我想添加5的一個平方根,我不希望它返回一些近似的整數/浮點數,我希望它返回一個對象,我可以與另一個非理性對象相加,我可以告訴對象在最近可能的時間解決以最小化浮點逼近誤差。
非常感謝!
有沒有人知道一個無理數的表示類型/對象/類/無論在任何編程語言?任何編程語言中的非理性數字表示?
歡迎任何建議。
簡而言之,如果我有兩個非理性的對象,都代表五的平方根,並且我將這些對象相乘,我想取回整數5,而不是浮點4點。
具體而言,我需要表示法能夠收集術語,而不是每次都解析爲整數/浮點數。例如,如果我想添加5的一個平方根,我不希望它返回一些近似的整數/浮點數,我希望它返回一個對象,我可以與另一個非理性對象相加,我可以告訴對象在最近可能的時間解決以最小化浮點逼近誤差。
非常感謝!
你在找什麼叫符號數學。您可能想嘗試一些計算機代數系統,如Maxima,Maple或Mathematica。也有用於此目的的庫,例如Python的SymPy庫。
啊!你知道,90%的時間,我發現圖書館和寶石的問題等都是術語。一旦我搜索了「符號數學......」,我發現了各種各樣的東西。 Sympy看起來很不錯。由於我是面向Ruby的,所以Maxima很有趣,因爲它是用Lisp編寫的。 GiNaC是競爭者,還有Axiom(看起來像野獸,但它有40年的使用歷史),再加上JAS和JACAL。非常感謝所有體重過磅的人。非常感謝! – oaklodge 2011-03-24 14:31:00
[Symbolic](http://brainopia.github.com/symbolic/)用於Ruby。答對了!再次感謝所有的指針。 – oaklodge 2011-03-24 14:59:27
Matlab中的基本數值類型是複數浮點矩陣。具體來說,如果您鍵入x = 1
,那麼您真正分配給x的是1x1矩陣,其[0,0]元素等於1 + 0i。
OP正在尋找非理性的幫助,而不是複雜的。 – PaulMcG 2011-03-23 15:45:04
它看起來像已經提到的SymPy將是最合適的方式 - 因爲你可能做你需要的東西,並且不要求你的軟件是用專用語言編寫的,比如所提到的數學產品。
在另一方面,如果你不希望引入進一步的依賴關係,和你的非理性情況下僅限於平方根的乘法,在Python這是一個簡單的任務:
class Irrational(float):
def __new__(cls, base, radix=1):
self = float.__new__(cls, base ** (1.0/radix))
self.base = base
self.radix = radix
return self
def __mul__(self, other):
if isinstance(other, Irrational) and other.radix == self.radix:
return Irrational(self.base * other.base, self.radix)
return float.__mul__(self, other)
例子:
>>> a = Irrational(5,2)
>>> a
2.2360679774997898
>>> a * Irrational(5,2)
5.0
您可以進一步追求它,幷包括其他操作和角落案例。但是對於表達式,你很快就會意識到你需要使用符號數學。
在紅寶石有http://flt.rubyforge.org/它給你你想要我相信。
我記得Smalltalk中的MathMorph具有代數數字(包括部首)的表示形式,作爲具有整數係數的單變量多項式的根,位於一定的間隔內。
你會發現斯特姆定理有趣的應用http://en.wikipedia.org/wiki/Sturm%27s_theorem
你必須google了一下,在舊檔案雖然挖,MathMorph是一個老項目...
大多數編程語言提供了一個專用的類型複數。這不夠好嗎? – 2011-03-23 15:06:28
@ Space_C0wb0y:無理數的類與複數的類不是同一類。 – Thanatos 2011-03-23 15:08:56
編號複數和無理數是兩個不同的東西。 – 2011-03-23 15:09:18