我寫了整整一倍浮動功能的Arduino的(無關,但我無法找到任何「適當」的人),我做此項檢查:可以檢查雙「d <0」嗎?
if (d < 0) {
d *= -1;
bin += "-";
}
我知道,因爲浮點不精確的雙重平等是挑剔的。那麼這樣做安全嗎?或者我應該堅持這一
int compareNums(double x, double y) {
if (abs(x - y) <= EPSILON) {
return 0;
} else if (x > y) {
return 1;
} else {
return -1;
}
}
和幾個簡單的問題(這是我在我的代碼後面的部分反正使用):如果我做d < 0
或d < 0.0
什麼關係呢?
我將double d
乘以10直到它沒有小數部分,因此我執行類似於d == (int) d
的檢查。我想知道什麼是一個好的epsilon(我在這裏使用http://msdn.microsoft.com/en-us/library/6x7575x3(v=vs.80).aspx),因爲我不想結束一個無限循環。根據文章0.000000119209
是浮動或類似的最小的區別差異。
感謝
'bin + =「 - 」;'無效C ... – 2012-07-18 03:42:48
無論您使用d <0還是d <0.0,我都無所謂。 (請參閱:下面的註釋:[爲什麼將0.1f更改爲0會使性能下降10倍?](http://stackoverflow.com/questions/9314534/why-does-changing-0-1f-to-0-slow ) - 但我無法理解你的最後一段。顯然'd ==(int)d'並不總是成立。 – Mysticial 2012-07-18 03:44:21
@R ..我使用Arduino的字符串類(注意大寫字符串),所以它的工作原理。我會使用C++字符串,但不能在兩者之間進行轉換(並且我需要使用Arduin的Serial來打印字符串)。 – Raekye 2012-07-18 03:59:30