修改了一下問題描述:

有沒有一個公式可以計算出構成一個有理數的最小的兩個整數?比如0.2857142857142857可以看做2857142857142857/10000000000000000,但也可以寫成2/7。

最後如果兩個整數不行,可以考慮多個整數,原則是任意一個有理數通過最少最小的數字表示出來,運算符號不限。不知道存不存在通用的方法?


這個東西叫做丟番圖逼近

Diophantine approximation?

en.wikipedia.org

實現有理逼近需要用道連分數相關理論,題主可以找一本規範的數論教材,裡面應該都有講。想親自操作一下的話可以在mathematica裡面實現,有 [公式] 函數是現成的;當然學會之後自己實現一下也不是很困難。

實際上丟番圖逼近理論遠不僅僅是用來解決逼近問題的,對於它有很多深刻的(令人禿頂的)研究,尤其是數論相關,有興趣可以自行google一下。甚至對於題主的問題,我們可以把有理逼近搞到有理多項式逼近上去,那就叫做帕德逼近

Padé approximant?

en.wikipedia.org

可以在mathematica裡面一下用 [公式] 函數來體驗一下,如果自己寫的話似乎也不是很難(但是我沒寫過這個)。


[公式] ,其中 [公式]

[公式]

[公式]


如果時計算機中的浮點數:

一般浮點數會被表示成: [公式]

直接根據存儲各式讀出來


有,分類來處理

第一類:有限小數,其他答主已經說了直接加一個1的分子,然後乘以10的n次方就行

第二類:無限循環小數,比如你的0.285714285714...(285714上打點,表示循環節)

處理步驟如下:

其他的無限循環小數參考處理。


存在。

0.12345678987654321=12345678987654321/100000000000000000。

對於有限小數,只需要把n位小數轉化成它的有效數字除以10∧n。

對於無限循環小數,則需要找出它循環節的對應分數,然後加上前面的有限小數(分數)。


先看它有幾位小數,比如說有n位小數。該數乘以10的n次方,再除以10的n次方。


怎麼叫最小的兩個整數?如果是近似你要多精確?

如果不要求精確度,那直接近似成整數。

如果要精確,那就要看精確程度和最小整數你要怎麼取捨。

如果要求絕對精確,有限小數可以通過去小數點除以十的次方的方式;無限循環小數可以通過另一個方式轉化成分數,比較不好說明就不說了。

話說你是想編程進行精確的大數運算嗎?這個問題我以前寫這個的時候思考過。


假設你要轉的數是0.1234343434....

假設x=0.1234343434....

那麼100x=12.34343434.... (等式1)

那麼10000x=1234.34343434...(等式2)

兩個等式相減得到10000x-100x=9900x=1234-12=1222

因此x=1222/9900

然後求1222與9900的最大公約數為2(輾轉相除法)

因此x=1222/9900=611/4950

這就是你要的答案!

其餘有理數可以類似處理!


推薦閱讀:
相關文章