我已經追溯到一個函數應該返回浮點值介於20和100左右,但有時(10的1次)返回比這更高的值。當我在方法的最後一行的表達,這樣存在的問題:在我的C++方法gremlins
return snap(baseNumber, targets) + (octave * NOTES_PER_OCTAVE);
如果我存儲在一個變量返回的值,然後再返回變量,問題消失:
float ret = snap(baseNumber, targets) + (octave * NOTES_PER_OCTAVE);
return ret;
下面是完整的方法:
static inline float octaveSnap(float number, std::vector<float>* targets){
static const int NOTES_PER_OCTAVE = 12;
int octave = number/NOTES_PER_OCTAVE;
float baseNumber = number - (octave * NOTES_PER_OCTAVE);
float ret = snap(baseNumber, targets) + (octave * NOTES_PER_OCTAVE);
return ret;
}
和這裏的 '捕捉':
// given a single value and a list of values (a scale), return the member of the list which is closest to the single value
static inline float snap(float number, std::vector<float>* targets){
float ret;
float leastDistance = -1;
for(int i = 0; i<targets->size(); i++){
float distance = targets->at(i) - number;
if(distance < 0){
distance = -distance;
}
if(leastDistance == -1){
leastDistance = distance;
}
if(distance < leastDistance){
leastDistance = distance;
ret = targets->at(i);
}
}
return ret;
}
我完全被這個困惑了。任何想法爲什麼第一個爆炸和第二個完美的作品?
這看起來像我在程序中其他地方的內存損壞(例如緩衝區溢出)。 – 2012-03-01 14:12:44
什麼是方法簽名? – cha0site 2012-03-01 14:12:54
聽起來像它與促銷和/或RVO有關...我想你最好的選擇是檢查生成的程序集。 – 2012-03-01 14:13:07