c++ - Assert错误,用cout证明

标签 c++ assert

当我运行它时,在 main() 中,cout 打印 5.395。但是断言说它失败了!!这真是令人难以置信,为什么会这样?

#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,转换回 double,然后除以 1000。:)

最佳答案

啊, float 。

例如,getAvgDensity() 的实际返回是5.395000000000000000000000001 .这不是技术上的== 5.395 , 是吗?打印当然会丢弃所有那些讨厌的尾随小数,但值仍然不同。

在使用 float 时,您必须自己决定可接受的“等于”定义是什么。手动舍入数字,或将其与 <= 进行比较/>=和合适的误差范围。

关于c++ - Assert错误,用cout证明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15374736/

相关文章:

java - 异常与断言

javascript - 如何验证 cucumberjs/puppeteer 中不存在的选择器?

selenium - IRetryAnalyzer 为定义为 SoftAssert 的测试用例生成不正确的结果

c++ - OpenGL Red Book 8th - First Example gives black box(Ubuntu)

c++ - 使用 tcpdump 捕获服务器-客户端通信

c++ - 为什么调用静态成员函数。或 -> 语法合法?

C 复制带有两个指针的链表

javascript - testcafe - 如何断言文本包含在 html 正文中

c++ - 模板函数定义

c++ - LNK2019/2001 : unresolved external symbol