作者sjgau (sjgau)
看板C_and_CPP
標題Re: [問題] 我自學C++ 接下來我該怎麼走
時間Mon Feb 22 11:47:16 2010
※ 引述《ale34354 (雞屎)》之銘言:
: 1.
: 答案顯示不出來因為超出範圍long int的範圍是-2147483648-2147483647
: 這個乘以後是2400000000
不可能說,答案顯示不出來。
long int a, b, c;// range is: -2147483648 ... +2147483647
// 當計算的結果,超出允許的範圍的時候,會得到錯誤的答案,
而且,電腦不會給你 任何的錯誤或是 警告訊息。
這是 很可怕的一種現象,所以 要同學加深印象,
並且知道原理和 對策
: 問一下 40000L "L"是什麼意思 我不知道 所以我就假設他是40000
L: long int, U: unsigned
: 2.我把他打進去 Dev-c++裡面後什麼東西都沒有顯示出來我猜應該是無線迴圈吧
: 大概吧.......不確定
double x, y;
x= 3.1415926;
y= x + 1.0;
// y > x
while (y > x) {
x= x*1.001;
y= y + 1.0;
}
// 不可能會產生 無窮的回圈,
一定是 你把程式 打錯了
這一題是考你 浮點數型態的 精確度,
或是 有效位數是 大約多少位數?
: 3.答案是9008425914092448.000
: 因為b=a跳出回圈
why?
b= a + 1.0;
// b > a
為什麼,b 會小於,或是 等於 a,
請解釋清楚。
: 4.答案是78498
: 使用什麼方法最快(不知道)
有一種 質數測試的方法,叫做
sieve 的方法。
篩選法。
google 一下吧
計算所需要的時間,都沒有給我。
time() 函數的精確度,只有到 秒。
怎麼辦!
: 我用的方法應該這樣叫
: 我猜的
: 循序收尋法 不過我也只會這個而已
: 跑的時間(超久的)
: 精確度要小於0.1秒(這句不懂)
請改用 ftime() 這個函數,
你可以 google 一下,這個函數 怎麼使用。
: 5.是93326215443944102後面141個0
: 必須精確到 每一位?(不懂這句話的意思
請使用 大數運算。
: 6.
: 這個數字太大了 沒有辦法直接顯示出來
: 所以我去google了
: 原來這題要用 加大整數 才可以顯示出答案
: 我看了加大整數怎麼寫 看好久
: 終於大概知道怎麼寫了
: 答案應該是這樣354224848179261915075
: 精確度要小於0.1秒是什麼意思?
請改用 ftime() 這個函數。
: 計算多久完成?是用時間函數算的嗎?
: 我用時間函數算起來怪怪的 我明天在來研究怎麼用.....
這個題目是考你,當函數的遞迴呼叫很慢的時候,怎麼辦?
如何改成 非遞迴的方式?
如果,一定 強迫使用 遞迴的函數呼叫,
如何解決 時間的問題?
: 7.放棄
不要 輕言放棄。
都已經告訴你,使用 辛普森積分法,
你為何就不能 google 一下呢?
這一題,其實 不是考你 數值積分。
求質數的那一題,如果使用 傳統的方法,
其實,也是在 提醒你 浮點數的 運算誤差的問題。
: 花的時間
: 大部分的時間都花在第6題上面....
: 我知道我接下來該怎麼走了......
: 就是 多作題目
: 謝謝大家了
不客氣!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.84
推 littleshan:不要用 ftime,那是舊的 POSIX 標準,也不在 C 標準內 02/22 11:55
→ sjgau:dev-c 有提供,或者,你有更好的 solution? 02/22 13:00
推 VictorTom:用time(), 跑十次除以十, 就約有0.1秒了.... (光速逃XD) 02/22 13:22
推 littleshan:這老問題了,Windows 用 QueryPerformanceCounter 02/22 13:24
→ VictorTom:(舉手) 那個~~只要求到0.1秒, 用clock()不行嗎....@_@" 02/22 13:25
→ littleshan:POSIX 用 clock_gettime 或 gettimeofday 02/22 13:25
推 littleshan:話說 C std 倒是沒提到 clock() 的精確度必須是多少... 02/22 13:46
推 UNARYvvv:要自行除以 CLOCKS_PER_SEC 02/22 15:38
→ tropical72:clock_t 我以為是精準到 1ms 02/22 15:54