Posted in

聊聊最近很火的 13.11 和 13.8 到底谁大? – 掘金_AI阅读总结 — 包阅AI

包阅导读总结

1. `AI 模型`、`精度问题`、`数值计算`、`运算错误`、`解决方法`

2. 本文讨论了 13.11 和 13.8 谁大的问题,指出不少 AI 模型会答错此类简单数学题,原因是意识不到做双精度浮点运算。还提到程序中 0.1 + 0.2 不等于 0.3 也是精度问题,并给出了遇到精度计算问题时的解决方法。

3.

– 数值比较

– 网友质疑 13.11 和 13.8 大小比较结果,应是 13.8 更大。

– AI 模型的“幻觉”

– 不少 AI 模型在回答此类数学题时出错,还有时对时错不稳定。

– 原因是大模型意识不到应做双精度浮点运算。

– 程序中的精度问题

– 例如 0.1 + 0.2 不等于 0.3 是因为十进制转二进制时的精度损失。

– 精度问题的破局

– 使用整数运算。

– 运用专门的高精度计算库。

– 进行四舍五入或取整。

– 采用字符串处理。

– 理解并接受精度限制。

思维导图:

文章地址:https://juejin.cn/post/7394993393124999168

文章来源:juejin.cn

作者:大码猴

发布时间:2024/7/24 8:45

语言:中文

总字数:1129字

预计阅读时间:5分钟

评分:90分

标签:AI模型,浮点数精度,数学计算,程序设计,解决方案


以下为原文内容

本内容来源于用户推荐转载,旨在分享知识与观点,如有侵权请联系删除 联系邮箱 media@ilingban.com

在最近我是歌手的排名统计中,出现了以下这一幕:

image.png

部分网友提出质疑,说是13.11大于13.8:

image.png

那么我们肉眼去看,根据我们12年义务教育去比对,肯定是13.8更大一些,但是这样一道简单的数学题还难倒了不少AI模型:

AI和程序的“幻觉”

文心一言:

image.png很明显,他在回答这道数学题时出现了胡说八道的现象,后面本人又去问了其他AI模型,有不少AI模型是答错的,还有一些AI在答题时出现了,时对时错的不稳定情况。

那么为什么AI模型会出现那么低级的错误呢?

因为大模型看到这样一组数字,意识不到应该做双精度浮点运算

那么我们程序上会不会出现这种问题呢?

就拿近年面试很流行的0.1 + 0.2它为什么不等于 0.3

image.png

其实都是精度的问题,我们先来看看程序是怎么看待我们这段运算代码的:

首先,我们需要理解浮点数在计算机中的表示方式。浮点数在计算机中是以二进制形式存储的,但并非所有的十进制小数都能精确地转换为有限长度的二进制小数。像0.10.2这样的十进制小数,在二进制表示下是无限循环小数。由于计算机的内存有限,这些无限循环小数在存储时会被截断到某个精度范围内,导致精度损失。

当两个这样的近似值相加时,结果也会是一个近似的值,而不是精确的0.3。这就是为什么在程序中,0.1 + 0.2的结果往往是一个接近但不等于0.3的数,如0.30000000000000004

破局

那么当我们遇到精度计算的问题时,该如何去解决?

  1. 使用整数进行运算
    如果可能的话,将问题转化为整数运算。例如,如果你在处理货币,可以将所有的金额乘以100(或1000,取决于你需要的精度),使用整数进行运算,最后再将结果转换回小数形式。
  2. 使用专门的库
    对于需要高精度计算的场景,可以使用像decimal.jsbignumber.jsbig.js这样的库。这些库提供了高精度的十进制数运算,可以精确表示和计算小数。
  3. 四舍五入或取整
    在某些情况下,你可能不需要非常高的精度,这时可以使用Math.round()Math.floor()Math.ceil()函数对结果进行四舍五入或取整。
  4. 字符串处理
    对于简单的场景,如果你只是需要显示结果给用户看,可以考虑将数字转换为字符串,然后进行字符串操作来避免精度问题。例如,你可以将两个小数相加后,使用toFixed(n)方法将结果保留到小数点后n位,然后再转换回字符串显示。
  5. 理解并接受精度限制
    在某些情况下,理解并接受浮点数的精度限制可能是最实际的选择。了解你的应用场景对精度的要求,并据此设计你的算法和数据结构。

程序对于数值的计算,并非我们直观上看到的简单表面计算,而是涉及到底层的进制转换(如十进制与二进制之间的转换)、精确的或由于精度限制而近似的二进制运算,以及可能的结果转换过程。