犯了只有人类才会犯的字符串比较错误,ChatGPT似乎拥有某种“直觉”?

@Ta 01-18 21:44发布,01-18 21:47修改 1553点击

在回答求将这段js代码转成php这个问题时,ChatGPT和我犯了同样的错误,我们都没发现JS代码中的这两串字符其实并不相同:

var strs = '0c4a20131ebd12f0de2b54163fe318b1e'
var r = "";

for (let i = 0;i < strs.length;) {
	var ccc = '0c4a2013ebd12f0de2b54163fe318b1e'.charCodeAt(i++);

我一眼看上去,strsccc的开头不是一样的嘛,为什么下面不直接使用strs呢?而ChatGPT也确实给出了符合我预期的结果,在ccc处直接使用了$strs

$strs = '0c4a20131ebd12f0de2b54163fe318b1e';
$r = "";

for ($i = 0; $i < strlen($strs);) {
    $ccc = ord($strs[$i++]);

最开始我一度以为ChatGPT给出的结果完全正确,因为结果是sYsC1g5GsgsKZ2wvsgw6sYdks65WOjFisiZkslFL1Bqk,和JS版结果sYsC1g5GsgOk16TKs61GZYMb1BMCsg1lZ6MlsgUJs2M3开头是相同的,我只看了开头就觉得结果正确,然后就发布了。

在发现结果并不正确之后,我也只是怀疑JS版是不是中途对strs进行了改写,导致它不能在ccc处引用,或者代码有计算精度问题导致中途出错。我完全没有怀疑strsccc处的字符串实际上不同,因为它们看上去惊人的一致,而且ChatGPT也认为两者相同,甚至直接做了改写,更何况输出结果的开头也是一致的……

在我反复多轮询问之下,ChatGPT对结果的差异也没有进一步的解释。

但其实,这两个字符串从中间的某一位开始就不同,这也是导致结果从中间开始出错的原因:

ChatGPT和我犯了一模一样的错误,这似乎意味着它的推理有着类似人类的”直觉“。

因为如果依赖机器的逐字节比较,它应该很容易就能发现两者不同,从而不会进行改写。

回复列表(7)
添加新回复
回复需要登录