[問題] 自定義輸出出了問題+float最小值
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++ 2010
問題(Question):
最近在寫OOP的最後一個作業,主要是練習template、exception和繼承
題目要求我們寫一個繼承自std::vector的class vectorX
vectorX要能夠存入任何型態的資料,不過每個vectorX裡的資料型態都一樣
然後程式會把vectorX裡的所有資料加起來,並把結果印出來
如果結果比該型態的最大值還大、或是比最小值還小,則會扔出exception並印錯誤訊息
整個程式我都寫好了,目前也都沒有error的存在
但在執行時遇到了問題:
我在加總並印出東西時,如果遇到exception會順利的把錯誤訊息印出來
但如果總和在範圍內,反而會印出很奇怪的結果
因為這奇怪的結果跟我自定義的ostream樣子一樣,我懷疑是否是ostream出了問題
但憑我一己之力無法解決......
請問板友們能幫我檢查看看哪裡出了問題嗎0.0?
感謝>"<
餵入的資料(Input):
vectorX vi2(5, 6)
vectorX vi3(numeric_limits<int>::min() + 3, -10, 0, 6, 7,
numeric_limits<int>::max() - 3)
預期的正確結果(Expected Output):
第一個結果是30,第二個結果是2
錯誤結果(Wrong Output):
第一個結果:
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0,
第二個結果:
0, 0, 0, 0, 0, 0,
程式碼(Code):(請善用置底文網頁, 記得排版)
vectorX.h:http://codepad.org/osPatcjY
main.cpp:http://codepad.org/HD4rB1uY
補充說明(Supplement):
我想不到更好的標題了......板主如果有更適合的標題請幫我改,感謝Q_Q
--
→
11/04 22:52,
11/04 22:52
推
11/04 22:52,
11/04 22:52
推
11/04 22:52,
11/04 22:52
→
11/04 22:52,
11/04 22:52
→
11/04 22:53,
11/04 22:53
→
11/04 22:53,
11/04 22:53
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.133.35.4
推
06/05 22:51, , 1F
06/05 22:51, 1F
→
06/05 22:51, , 2F
06/05 22:51, 2F
→
06/05 22:53, , 3F
06/05 22:53, 3F
→
06/05 22:53, , 4F
06/05 22:53, 4F
→
06/05 22:53, , 5F
06/05 22:53, 5F
但我的回傳值是Type reg 阿ˊˋ
推
06/05 22:56, , 6F
06/05 22:56, 6F
→
06/05 22:57, , 7F
06/05 22:57, 7F
好像知道了,我把vectorX<Type> sum() 改成了Type sum()
→
06/05 23:00, , 8F
06/05 23:00, 8F
→
06/05 23:01, , 9F
06/05 23:01, 9F
:D 感謝~
然後現在開始修正計算方式,QAQ
※ 編輯: o07608 來自: 220.133.35.4 (06/05 23:02)
vectorX vi3(numeric_limits<int>::min() + 3, -10, 0, 6, 7,
numeric_limits<int>::max() - 3)
現在這個結果會變成6......為什麼-.-
→
06/05 23:10, , 10F
06/05 23:10, 10F
原來是多寫了一次head++ -_-
※ 編輯: o07608 來自: 220.133.35.4 (06/05 23:23)
現在在做float test,碰到另一個問題:
vectrX vf1(1.73f, numeric_limits<float>::max() - 0.5f, 0.0f, -1.0f,
-numeric_limits<float>::max() + 0.5f)
在助教給的測資裡,應該是要印出:
1.73, 3.40282e+38, 0, -1, -3.40282e+38 這樣
可是我會印出:
1.73, 3.40282e+038, 0, -1, -3.40282e+038
請問這樣有差嗎._.
因為之後加起來的結果是錯的......
→
06/05 23:36, , 11F
06/05 23:36, 11F
如果我沒搞錯你的意思的話,這的確是助教要我們實作的作法
→
06/05 23:48, , 12F
06/05 23:48, 12F
不好意思,可以請你解釋的清楚一點嗎0.0?看不太懂
推
06/06 06:25, , 13F
06/06 06:25, 13F
→
06/06 10:18, , 14F
06/06 10:18, 14F
→
06/06 10:18, , 15F
06/06 10:18, 15F
那請問有辦法修改嗎0.0?
→
06/06 10:37, , 16F
06/06 10:37, 16F
這邊我很不熟,囧a
→
06/06 10:40, , 17F
06/06 10:40, 17F
→
06/06 10:41, , 18F
06/06 10:41, 18F
今天去問了助教後,把最後一個問題解決了:
float和double的numeric_limits<Type>::min(),印出來的並不是max的負值
而是一個接近0的數,原因和它的二進位表示法有關(有請高手詳細解釋)
因此要得到float和double負數的最小值,得用-numeric_limits<Type>::max()才行
※ 編輯: o07608 來自: 220.133.35.4 (06/06 19:14)
→
06/06 21:33, , 19F
06/06 21:33, 19F