無法整除數字

IVArray.vi 請問一下各位大大,附件是我寫的子vi,如果max填0.1,min跟step填0.01,則結果會變成[0.01,0.02…“0.09,0.1,0.1”],使用Probe檢查時,最後一次都會跑兩次0.1,理論上應該是要變成[0.01,0.02…“0.09,0.1”]才對,結果卻怪怪的,如果換成max=0.1,min=0.03,step=0.01,這個卻又正常[0.03,0.04…“0.09,0.1”],想請問各位大大有什麼好的解決方式?

[QUOTE=aiuan]IVArray.vi 請問一下各位大大,附件是我寫的子vi,如果max填0.1,min跟step填0.01,則結果會變成[0.01,0.02..."0.09,0.1,0.1"],使用Probe檢查時,最後一次都會跑兩次0.1,理論上應該是要變成[0.01,0.02..."0.09,0.1"]才對,結果卻怪怪的,如果換成max=0.1,min=0.03,step=0.01,這個卻又正常[0.03,0.04..."0.09,0.1"],想請問各位大大有什麼好的解決方式?[/QUOTE]

現在暫時前半部先乘個倍數"1000000",後半部在除回來,把此問題先解決= =|||。

看來,這又是一個很典型的浮點誤差的問題。

試試看這樣能不能解決問題:


程式:IVArray2.vi

這是我後來改的子VI,IVArray.vi,如果不是整除的話,最後一位數就是最大值,如果是整除的話,就可變成剛剛好的數值。

此問題應該可以簡單的解決:
把原本雙精度輸入改成單精度輸入即可。

補充說明:
印象中雙精度的0.1其實不是0.1,是略小於0.1
這類問題其實只需要將變數全部改成單精度即可,無需增加其他的運算式來處理。
(用問題來解決問題難保不會出現其他的問題XD)


caeru40378.4604282407

請問如果其他人就想要用"-"開始的話,那你用的單精度,不知道要怎麼樣解決"-"的問題呢?

單精度是沒有正負號的問題,這點可以放心。

不過我的回文有問題,
實際測試之後,單精度不會使等式成立。

順便說一下,
0.01實際上是0.00999451(以下略
0.1 實際上是0.100006(以下略

0.01*10-0.1以雙精度算出來是-3.72529E-9
                 以單精度算出來是-7.45058E-9

此外在某些精度切換時,會暫時得到相等的結果,
但重複執行幾次之後又會變成不等。
此部份關係到程式內部資料型態宣告的問題,在此不予討論。

以上報告