Lua十进制精度损失

时间:2016-11-11 17:24:04

标签: lua precision

有人可以解释为什么在lua中运行:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <CreateAndSendEnvelope xmlns="http://www.docusign.net/API/3.0">
      <Envelope>
        [All the good envelope stuff]  
      </Envelope>
      <Envelope>
        [All the second good envelope stuff]  
      </Envelope>
[closing XML]

,而

return 256.65 * 1000000 + .000000005 - 256 * 1000000 gives 649999.99999997  

从我所看到的,它似乎是一个严格的小数65(它似乎也是15)和256 - 267范围内的整数的问题。我知道这与使用浮点进行这些计算有关,但是我仍然很好奇这些价值观的特别之处

2 个答案:

答案 0 :(得分:2)

这些值的特殊之处在于0.65不是二进制分数(即使它是小数部分),因此无法在浮点中精确表示。

为了记录,这不是Lua特有的。在C中也会发生同样的事情。

答案 1 :(得分:1)

出于同样的原因,10/3是碱基10中的重复部分。在碱基3中,除以3将导致整数。在基数2(用于表示计算机中的数字)中,您生成的数字会产生可以精确表示的分数。

Further reading.