作者ric2k1 (Ric)
看板EE_DSnP
標題Re: [公告] Final Project correction/update
時間Mon Jan 11 14:54:44 2010
[01/11] (2:00pm) Ref program updated
Minor changes. Improve the performance of the reference program
in command "CIRVector" a little bit.
Also update BddNode.h in bdd.tgz for (UINT_MAX --> ~(size_t(0)))
(see below).
> Affected: ref/bdd-64, ref/bdd-32, and src/bdd/bddNode.h in bdd.tgz
> Note: This update is optional. It's OK if you don't download
this new version.
[01/05] (9:00pm) 修正 #define BDD_NODE_PTR_MASK
原先的 BDD_NODE_PTR_MASK 被定義成
((UINT_MAX >> BDD_EDGE_BITS) << BDD_EDGE_BITS)
但由於 UINTMAX 在 64-bit platform 上 (大部分) 等於 4294967295U (32-bit)
所以當 pointer (64-bit) address > 4294967295U (i.e. 0xFFFFFFFF) 時,
BddNodeInt* getBddNodeInt() const {
return (BddNodeInt*)(_nodeV & BDD_NODE_PTR_MASK); }
就會得到 garbage address.
雖然上述問題不一定會發生,但還是建議將 BDD_NODE_PTR_MASK 的定義改成:
#define BDD_NODE_PTR_MASK
((~(size_t(0)) >> BDD_EDGE_BITS) << BDD_EDGE_BITS)
> Affected: src/bdd/bddNode.h
> Note: 暫時不更新 ref code & prog, 請大家自行修訂。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.224.46.86
1F:→ slinh:偷偷問 bddref 的bsetv 3 8 好像不會作isValidVarName? 01/06 00:13
2F:→ ric2k1:跟據 website 定義的 command usage, bsetv 3 8 是可以的哦 01/06 00:57
3F:→ ric2k1:然後如果 bddName is a string, 就存到 _bddMap, 如果是int 01/06 00:59
4F:→ ric2k1:就存到 _bddArr. 01/06 00:59
5F:→ ric2k1:更新 project website. 01/06 16:19
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.21.241
6F:→ ric2k1:起因於前幾天 run 到一個 cirvector 的 case ref program 01/11 14:55
7F:→ ric2k1:跑不出來, 所以改了幾行 code. 昨天將所有 cases 跑過一遍, 01/11 14:56
8F:→ ric2k1:還是有改進的空間啦... 但是就先這樣, 真的有時間或是被 01/11 14:57
9F:→ ric2k1:刺激到再來改 XD 01/11 14:57