作者applecool (noOneKnows)
看板C_and_CPP
標題Re: [問題] 如何在編譯期建表
時間Thu Oct 24 22:00:19 2013
感謝回覆的板友
經過版友提供的關鍵字和 code,我 study 了之後,
感覺必須要有 constexpr 的數學函數才有辦法
因為我的函數雖然只跟索引有關,但很複雜。
小弟數學不佳,不知道如何拆成遞迴
不過 survey 了一下發現 constexpr 數學函數好像沒有編譯器實作出來
手邊的 VC 好像不認識 constexpr
看來短期內這需求是無解了
所以我還是用批次的方式產生了。
總之感謝大家!!
※ 引述《applecool (noOneKnows)》之銘言:
: 小弟需要在編譯期建一張很大的表,需求大概像這樣子,
: 簡化起見,假設長度 N,式子為 Exponential value of (index * alpha)
: 我希望達到這樣的效果:
: static const double alpha = 3.0;
: static const double Table[N] = {
: exp(0*alpha),
: exp(1*alpha),
: exp(2*alpha),
: ...
: exp(i*alpha),
: ...
: exp((N-1)*alpha)
: };
: 我希望一開始就把這個結果 load 到記憶體,就像手動宣告以上程式碼這樣。
: 而不可以做成
: static Table[N];
: Table[0] = exp(0*alpha);
: Table[1] = exp(1*alpha);
: ...
: Table[N-1] = exp((N-1)*alpha);
: 目前沒想到什麼好方法,主要是宣告 array 這塊,還要保證記憶體連續,還有實際上的
: 式子遠比 exp 複雜也希望不要使用數學展開成遞迴。
: 請問有人有好方法嗎?
: 感謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.241.67.33
推 loveflames:gcc 有constexpr 10/24 22:17
推 loveflames:有試過preprocessor?我不知道行不行就是 10/24 22:20
→ applecool:preprocessor 無法運算吧? 10/24 22:35
推 loveflames:有計算能力,可以串一下我的文 10/24 22:48
→ loveflames:只是寫起來會很醜 10/24 22:50
→ applecool:exp 可以算? 10/24 22:55
→ azureblaze:可是還是用產生器吧XD 10/24 23:00
推 loveflames:能寫加減,就能寫乘除,但這個也需要遞慧 10/24 23:00
推 soheadsome:用enum 取代constrxpr 10/24 23:53
→ applecool:感謝,但式子全都是使用浮點數運算的。 10/25 22:59