首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

周志华教授《集成学习》中文版上市,李楠博士带你一起入门

最近10年,深度学习的崛起带来的AI新一波的浪潮,语音识别、计算机视觉、机器翻译等领域均取得巨大的技术突破。 同时,也因为过度炒作,使得一些人对深度学习之外的机器学习方法知之甚少。 但不得不说的是,集成学习方法,一直是整个机器学习领域的「常青树」,受到学界与业界的广泛关注。 近日,南京大学周志华教授的专著《集成学习:基础与算法》中文版上市,让我们能够有机会系统的学习这一经典的机器学习方法。 为了更好的帮助广大读者们学习、了解集成学习,博文视点学院联合机器之心,特邀《集成学习:基础与算法》一书译者李楠

02

cJSON精度丢失问题

问题复现步骤: 1) 输入字符串: {     "V":0.12345678 } 2) 字符串转成cJSON对象 3) 调用cJSON_Print将cJSON对象再转成字符串 4) 再将字符串转成cJSON对象 5) 保留8位精度方式调用printf打印值,输出变成:0.123456 问题的原因出在cJSON的print_number函数: static char *print_number(cJSON *item) {     char *str;     double d = item->valuedouble;     if (fabs(((double) item->valueint) - d) <= DBL_EPSILON && d <= INT_MAX                     && d >= INT_MIN)     {         str = (char*) cJSON_malloc(21); /* 2^64+1 can be represented in 21 chars. */         if (str)             sprintf(str, "%d", item->valueint);     }     else     {         str = (char*) cJSON_malloc(64); /* This is a nice tradeoff. */         if (str)         {             if (fabs(floor(d) - d) <= DBL_EPSILON)                 sprintf(str, "%.0f", d);             else if (fabs(d) < 1.0e-6 || fabs(d) > 1.0e9)                 sprintf(str, "%e", d);             else                 sprintf(str, "%f", d);         }     }     return str; } 最后一个sprintf调用没有指定保留的精度,默认为6位,这就是问题的原因。 注:float的精度为6~7位有效数字,double的精度为15~16位。

02
领券