作者JACK19920102 ()
看板MATLAB
標題[討論] 送p幣 函式中的mod 不想要出現小數
時間Sat Aug 27 09:22:26 2016
我目前在寫一個程式
其中一段會用到一個函式
函式的目的是要把十進位的整數
轉換成factoradic base(階乘進位)的表示法
舉例:
十進位的 38
等於階乘進位的
12100
因為38 =
1*4! +
2*3! +
1*2! +
0*1! +
0*0!
轉換方式滿簡單的
38/1 = 38 ... 0
38/2 = 19 ... 0
19/3 = 6 ... 1
6/4 = 1 ... 2
1/5 = 0 ... 1
我函式的寫法如下:
function u = dec_to_factoradic(mm,n)
u = zeros(1,n);
jj = 2;
while mm~=0
u(n-jj+1) = mod(mm,jj);
mm = floor(mm/jj);
jj = jj+1;
end
回傳的u就是像上面12100那種形式的陣列
n是階乘的個數 12100 的n 就是5
這個函式我在用數字代進去 測試時 沒有問題
但放在程式當中 因為有input變數 (mm)
mm這個數 又會自動變成科學記號
比方像是8.0344e+05
這時第一次的while迴圈 就會出現小數點!?
(而且只有第一次 後面就不會)
mod(mm,jj) = mod(8.0344e+05,2) = 1.3717
這邊出現小數點 就會讓我的程式整個卡住
會讓階乘進位變成
7 5 3 0 1 3 2 1 1.3717 0
但是如果在command window 打上mod(8.0344e+05,2)
跑出來的卻又是0!?
我想要把科學記號改成完整呈現 但不知道怎麼用
目前的做法是在mod外面加上round或是floor
至少程式可以跑
但我不知道這樣在意義上是否不一樣!?
我為了這個地方已經整晚沒睡了qq
因此想來請教板上的高手大大們
是哪邊出問題 該怎麼做
我什麼地方犯錯沒注意到
或是函式有什麼其他的寫法
幫我解決問題的大大 贈送1000p聊表心意
其他只要前十個在這篇文章推文的id也各送100p
先謝謝大家了 好累qq
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.114.54.67
※ 文章網址: https://webptt.com/m.aspx?n=bbs/MATLAB/M.1472260949.A.6B4.html
1F:推 profyang: int64試看看? 08/27 10:22
2F:推 profyang: 我的意思是把mm取代成int64(mm) 08/27 10:24
3F:推 tallman: 雖然不大會 但還是幫推 08/28 12:11
4F:推 bpsk: 祝你好運 08/31 01:09
5F:推 bpsk: 我用我的MATLAB不會有小數點欸 08/31 14:24
6F:推 warmtake: 你是不是改變了輸出格式? 09/01 13:08
7F:→ warmtake: 在一開始使用format,9位數以內的是會用整數呈現 09/01 13:10
8F:→ JACK19920102: 差點忘記這篇文QQ 以上幾位大大各送100P 09/17 01:16
9F:→ JACK19920102: 錢已發喔 謝謝 09/22 15:23