看板 Flash 關於我們 聯絡資訊
※ 引述《etrexetrex (ETREX)》之銘言: : 這是浮點數儲存時會造成的問題 : 因為浮點數用二進位表示法去逼近十進位的值 : 例如0.5 = 1/2 可以用2進位完全的表示 : 但 0.4 = 0.25 + 0.125 + 0.015625 + ..... : 二進位是無法表示0.4的 : 但是可以逼近到 0.3999999 : 因此若將實驗改為 : 隨機取出兩個數字後 : 將其中一個除以16另外一個除以128 : 然後再將兩個都乘以128 : 接著判斷這兩個數字和她們四捨五入到整數位的數字是否相等 : 應該就不會出現數字失真的問題 喔 我的天啊 原來如此?! 我昨天也想到 可能是顯示出來是112 可是實際上是111.999999999999999999999999999999.... 所以四捨五入後變成112(flash在trace的時候好像會到某個位數就四捨五入) 但是實際上他還是差了112一點點 可是我卻沒辦法證實我的想法 也不知道為什麼會出現這樣的問題 經過您這麼一解釋 我就比較清楚為什麼會有問題了 上網查了一下 好像連c語言都是用類似的方式去紀錄 那是不是都會有失真的問題呢?? 又 可以怎麼去克服呢? (ps 我的程式已經用別種方式克服 可是我覺得還是有一點遺憾 可參考如下 http://pub.mlc.edu.tw/files/002679/learn/simple.swf 很簡陋 但是有達到一些我的目的了) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.19.207.209
etrexetrex:另外寫函數作分數運算?分母分子分開存 顯示時才用浮點 11/20 19:22
jonathanmeow:是的 您真內行 我把所有的類型都變成分數 11/20 19:43
jonathanmeow:每個題目都有分子、分母和整數部份(帶分數) 11/20 19:43
jonathanmeow:但當題目類型是整數時 就只顯示分子(此時分母等於1) 11/20 19:44
jonathanmeow:小數時就隨機產生分母是10或100 分子就是一個整數 11/20 19:44
jonathanmeow:列出在螢幕上的時候才顯示出分子除以10或100的狀況 11/20 19:45
jonathanmeow:至於真分數假分數就是隨機跑分子、分母 做些小判斷 11/20 19:45
jonathanmeow:帶分數就是先產生一個假分數 然後計算使之變成帶分數 11/20 19:45
jonathanmeow:雖然不曉得學生在進行練習的時候有沒幫助 11/20 19:47
jonathanmeow:但應該會為老師節省很多工作(至少可以拿來出題) 11/20 19:47
jonathanmeow:但該題會判斷為錯答 用以解決學生真的解不出來正解時 11/20 19:48
jonathanmeow:可以讓他知道答案 但又不會造成答對率的誤判 11/20 19:48
jonathanmeow:怎麼會少了一行 (拿來出題)之後有下列這句 11/20 19:49
jonathanmeow:螢幕上按"上上下下左左右又"可以直接出現答案 11/20 19:50
etrexetrex:超有趣的密技 XD C#裡有變數型態:十進位數 好像不失真 11/20 20:32
aquarianboy:AS3.0好像也有int可以用 11/20 21:36
aquarianboy:不過不確定是不是能不失真 :) 11/20 21:36