[問題] 如何取到小數後指定位數進行複雜運算

看板C_and_CPP作者 (casper)時間14年前 (2011/08/23 20:03), 編輯推噓0(0021)
留言21則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 無 問題(Question): 如何取到小數點後指定位數做複雜的數字運算. 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) http://codepad.org/YA28X9zQ 補充說明(Supplement): 各位版友, 我又上來問一些問題了, 如果有發言不當或是格式不當的地方, 請 多多海涵, 如所張貼的程式碼, 我想隨機亂數產生一個0-5之間的數字, 但是希望 能夠能使得到的亂數能夠取至小數點某位數, EX: 產生4.236859這樣的數字, 但是我希望能有方法可以使出來的數字可以變成4.2369像這樣四捨五入, 不知道 各位高手們, 是否有方法可以達成呢? 已爬過文章以及google過, 但是只有"輸出" 可以用setprecision以及fixed達成, 因為我的目的是想要用隨機產生3個亂數, 同時一起輸入4個限制式運算, 以便求得最佳解(類似演算法那種), 因為得到的 亂數解(太多位數)常常會無法同時滿足4個限制式, 造成一直反覆無窮迴圈, 導致程 式一直卡住, 無法往下計算最佳解, 因此我就有個想法是否能夠取到小數點後指定 位數再帶入限制式求解是否會比較好. 懇請各位大大指教, 或是如果有說明未詳盡之處,請告知小弟, 小弟馬上會補充 說明, 在這邊先謝過大家抽空閱讀此篇文章!! 謝謝各位~ -- ◤ ◥ ◢ ◣ 傑米,炸掉它吧。 ⊙▁⊙─ ─⊙▂⊙ 碰到問題,用C4就對了! ╰ ∕皿﹨ ◥皿◤ ╯ ◥█◤◢ ◥ ︶◤ Adam Savage ◤ ︶ ◥◤ ﹨▼∕◥ James Hyneman MYTHBUSTERS ◥ ◤\◥ by dajidali -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.203.23 ※ 編輯: wajolinhigh 來自: 140.114.203.23 (08/23 20:04)

08/23 21:20, , 1F
亂數取0-50000的數字如何 再除以10000就是你要的四位小數
08/23 21:20, 1F

08/23 21:30, , 2F
樓上方法似乎有缺點, RAND_MAX 只到 32767 < 50000,
08/23 21:30, 2F

08/23 21:30, , 3F
這樣下來就不均勻了。
08/23 21:30, 3F

08/23 21:40, , 4F
08/23 21:40, 4F

08/23 21:41, , 5F
要注意浮點數誤差和 overflow 問題..
08/23 21:41, 5F

08/23 21:54, , 6F
感謝樓上兩位大大,小弟馬上來try!
08/23 21:54, 6F

08/23 22:01, , 7F
原來如此 學到一課 @@
08/23 22:01, 7F

08/23 22:09, , 8F
愚笨的我還真有點看不太懂,只好繼續用力看了...
08/23 22:09, 8F

08/23 23:31, , 9F
其實RAND_MAX可以跟INT_MAX一樣 只是win 32只能32767
08/23 23:31, 9F

08/23 23:53, , 10F
orz..wiki 網頁不見了.. 週期基本上都是 INT_MAX,會用
08/23 23:53, 10F

08/23 23:54, , 11F
32767 是因compiler通常只取其中15bits出來,讓user
08/23 23:54, 11F

08/23 23:54, , 12F
猜不出亂數常數為何.相對,若RAND_MAX=INT_MAX會製造出
08/23 23:54, 12F

08/23 23:55, , 13F
幾個問題,常數好猜 或 產生速度較慢.
08/23 23:55, 13F

08/24 00:08, , 14F
原來是我進不去而已 .. http://0rz.tw/2mPip
08/24 00:08, 14F

08/24 01:09, , 15F
在linux下RAND_MAX = INT_MAX 它也沒慢到那邊去呀~
08/24 01:09, 15F

08/24 01:09, , 16F
而且不是數字範圍愈小愈好猜嗎?
08/24 01:09, 16F

08/24 11:24, , 17F
以全週期都是 INT_MAX 而言,模數若都近似於 INT_MAX,
08/24 11:24, 17F

08/24 11:25, , 18F
RAND_MAX 愈小,代表取用 bit 數愈少。
08/24 11:25, 18F

08/24 11:27, , 19F
00:08 連結給了一些常用 compiler 使用常數與取用bit數
08/24 11:27, 19F

08/24 11:28, , 20F
GCC 和 ANSI C 採用常數一樣,取用 bit 數不同,何者容
08/24 11:28, 20F

08/24 11:29, , 21F
易猜 ? 有些離題, 打住於此好了。
08/24 11:29, 21F
文章代碼(AID): #1EKvSE-E (C_and_CPP)