在IEEE 754中处理字符串到浮点十进制截断的正确方法是什么?[关闭]
这不是StackOverflow问题,因为软件工程师没有足够的数学技能来回答IEEE 754问题,因此必须由IEEE导师回答。 我必须使用C ++模板为Grisu和Unicode 实现我自己的字符串到浮点和浮点到字符串算法。我使用了维基百科单精度浮点格式文章中的以下算法: 考虑带有整数和小数部分的实数,例如12.375 将整数部分转换并规范化为二进制 使用如下所示的以下技术转换分数部分 添加两个结果并调整它们以产生适当的最终转换 我不确定当转换为float的字符串具有更多的数字精度时我该怎么做我可以存储在32位(例如)浮点数但它没有达到+/-无穷大,并且正确的方法来舍入不精确的数字/小数点。对于32位浮点数,只有7位精度。对于64位浮点数,它的精度为16位。除此之外的任何数字必须使用IEEE 754舍入规则进行舍入。 例 基础2选项 我们首先转换整数部分,就像wiki条目中的算法一样,通过扫描到最低有效数字然后通过将每个数字乘以10的幂来解析回最高有效数字(即标准字符串到整数算法)并使用无符号乘法环绕来检测位溢出,在基数2中舍入; 这听起来不对我,我认为维基百科文章不是最好的算法。 基数10选项 我们将每个数字转换为带有单个最高有效数字的指数表示法,例如转换123456780123456789.012。使用IEEE 754舍入规则到1.234567e20 。听起来是最好的选择,因为我们只需要解析一次文本,我们必须扫描指数,我们可以避免字符串到整数算法。由于数字仍然在10的基数,因此基数为10的舍入听起来很准确,你只需要读取数字和小数一次,而不需要乘以10的幂。如果这是首选方法,那么应该更新wiki条目。