當我運行這個,在main()cout打印5.395。但斷言說它失敗了!這真的讓人難以置信,爲什麼會這樣呢?斷言是錯誤的,證明與cout
#include <iostream>
#include <cassert>
using namespace std;
const float A = 1.6;
const float C = 1.55;
const float G = 2.2;
const float T = 1.23;
char empty[18];
int arraySize;
void copyArray(char sourceArray[], char targetArray[], int size) {
for(int i=0;i<size;i++) {
targetArray[i] = sourceArray[i];
}
}
double getAvgDensity(char aminoAcid) {
char aminoUpper = toupper(aminoAcid);
aminoToArray(aminoUpper);
double counter = 0;
int codonTotal = arraySize/3.0;
if (arraySize == 0)
return 0;
else
{
for (int i = 0; i < arraySize; i++) {
counter += charToDouble(empty[i]);
}
return (counter/codonTotal);
}
}
int main()
{
cout << getAvgDensity('A') << endl; // prints 5.395
assert(getAvgDensity('A')==5.395);
return 0;
}
編輯:感謝所有的答案,我只是乘以1000,轉換成int,轉換回雙和除以1000 :)
我敢打賭,你comparig一個浮點值,是不是precesely是...;) – 2013-03-13 00:16:48
請訪問http:// stackoverflow.com/questions/1839422/strange-output-in-comparison-of-float-with-float-literal?rq=1 – 2013-03-13 00:18:13
如何在不更改斷言聲明的情況下解決此問題? – Foxic 2013-03-13 00:19:45