error in large integers

I am currently working with fractions involving 10digit integers.
for example, typing 1168347147/863334886 into MATLAB produces the answer 4045/2989.
But I want to store the fractions exactly. How do I go about doing this?
Many thanks.

回答 (2 件)

Aldin
Aldin 2012 年 3 月 21 日

0 投票

Hi,
use vpa functon
for example:
vpa('4045/2989',100) ---> for hundred digits

5 件のコメント

Walter Roberson
Walter Roberson 2012 年 3 月 22 日
No, you cannot get "fractions exactly" by using VPA. Try vpa('1/3') for example: the representation you get will not be of 1/3 because 1/3 is an infinitely repeating decimal.
Aldin
Aldin 2012 年 3 月 22 日
I have one even better solution:
>>1168347147/863334886
ans =
1.3533
USE "rats" function:
>>rats(ans)
the result will be: 4045/2989
Eigo Takkeda
Eigo Takkeda 2012 年 3 月 22 日
I wish to use the value 1168347147/863334886 and store it exactly for further calculations, but MATLAB automatically rounds it to 4045/2989, and therefore looking for a way to avoid this rounding.
Aldin
Aldin 2012 年 3 月 22 日
I think is more better to use smaller number like 4045/2989 ???
Aldin
Aldin 2012 年 3 月 22 日
Do you know:
1168347147/863334886 = 4045/2989

サインインしてコメントする。

Walter Roberson
Walter Roberson 2012 年 3 月 22 日

0 投票

If you have the symbolic math toolbox, then
sym('1168347147/863334886')
Note that the result will be a symbolic number, not a double precision number.

3 件のコメント

Eigo Takkeda
Eigo Takkeda 2012 年 3 月 22 日
could I then use this for further calculations?
Walter Roberson
Walter Roberson 2012 年 3 月 22 日
Yes, if you do have the symbolic toolbox then you would be able to use symbolic numbers in further calculations; the results would be symbolic numbers.
There might be places along the way where you needed to convert the symbolic numbers to double precision using double(), as there are MATLAB routines that cannot work with symbolic numbers.
Aldin
Aldin 2012 年 3 月 22 日
Hello sir Walter,
Can you please explain:
>> sym('1168347147/863334886')
ans =
1168347147/863334886
>> ans * 1,4
ans =
8178430029/4316674430
--------------------------
But if i check last result with 'vpa' function i got this:
>> vpa('863334886*1,4)
ans = 1208668840.4

サインインしてコメントする。

質問済み:

2012 年 3 月 21 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by