我有一個非常詳細的while循環,並已真正抵制不得不再次尋求幫助,但我很茫然!對於這個while循環代碼,我真的很抱歉,有很多事情要做,但我不想留下任何東西,以防萬一觀衆需要看到這一切。我在Swift中的while循環不會終止,我錯過了什麼?
func retRhoCurrent() -> Double {
while abs(pTarget - pCalc) > 1 {
//
// SET rhoCurrent
//
if (pTarget > pCalc) {
rhoLow = rhoCurrent
if(rhoCurrent >= rhoHigh) {
rhoCurrent += RHO_C
rhoHigh = rhoCurrent
} else {
rhoCurrent += ((rhoHigh - rhoCurrent)/2)
}
} else {
rhoHigh = rhoCurrent
rhoCurrent += ((rhoLow - rhoCurrent)/2)
}
//
// SET rhoR
//
rhoR = rhoCurrent/RHO_C
//
// SET DIFFERENTIAL
//
diffAggregate = 0
for var kIndex = 0; kIndex < NK_VALUES.count; ++kIndex {
diffSegment = NK_VALUES[kIndex]
diffSegment *= pow(rhoR, IK_VALUES[kIndex])
diffSegment *= pow(tempR, JK_VALUES[kIndex])
iFactor = 0
if LK_VALUES[kIndex] > 0 {
diffSegment *= exp(-1 * pow(rhoR, LK_VALUES[kIndex]))
iFactor = LK_VALUES[kIndex] * pow(rhoR, LK_VALUES[kIndex])
}
if PK_VALUES[kIndex] > 0 {
diffSegment *= exp(-1 * PK_VALUES[kIndex] * pow(rhoR, 2) - BK_VALUES[kIndex] * pow(tempR - UK_VALUES[kIndex], 2))
iFactor = 2 * rhoR * PK_VALUES[kIndex] * (rhoR - 1)
}
diffAggregate += (diffSegment * (IK_VALUES[kIndex] - iFactor))
}
//
// SET pCalc
//
zDiff + 1 + diffAggregate
pCalc = zDiff * R_CONST * 1000 * tempK * rhoCurrent
}
return rhoCurrent
}
我想另一個問題,我也就是主要價值我想出來這個while循環的是rhoCurrent(我會用這最後#計算別的東西)。做「返回rhoCurrent」將工作,更正?
非常感謝!
幾個快速評論:1)你在哪裏設置pTarget值? 2)似乎這比編程問題更關於算法。也許輸出值會幫助你看看它是否如你所期望的那樣收斂,或者你有一個合乎邏輯的問題... – Rusty30 2015-02-24 18:35:15
你預期會發生什麼,以及你觀察到了什麼? 「pTarget」的典型值是什麼?當循環迭代時,'pCalc'接近該值嗎? – Caleb 2015-02-24 18:51:58