双精度浮点数能否表示一个64位数字而不失精度?
2009-11-24 11:16:18
收藏:0
阅读:399
评论:8
我想使用 Lua 来表示一个在 0 到 2^64-1 之间不会出现舍入误差或会发生可怕事情的整数(它内部只使用双精度浮点数)。
这可行吗?
原文链接 https://stackoverflow.com/questions/1789408
点赞
stackoverflow用户71883
双精度浮点数
是一个64位类型本身。但是,你会失去1个比特用于表示符号,以及11个比特用于表示指数。
因此,答案是否定的:无法做到。
2009-11-24 11:20:32
stackoverflow用户25990
我对 Lua 一无所知
但是,如果你能够弄清楚如何在 Lua 中进行位运算,理论上你可以制作一个封装类,接受你以字符串形式给定的数字,并按照代表你给定的数字的顺序设置浮点数的位。
更实用的解决方案是使用一些大数库。
2009-11-24 11:30:37
stackoverflow用户10320
从记忆中来说,double
可以精确地表示一个 53 位的有符号整数。
2009-11-24 11:30:39
stackoverflow用户88851
在64位系统上,您只能存储2^64种不同的代码。这意味着,一个64位的类型能够表示2^64个整数,却没有任何位置来表示其他内容,例如浮点数。
显然,双精度浮点数可以表示大量的非整数数字,因此不能满足您的要求。
2009-11-24 12:06:07
stackoverflow用户88888888
尽管您已经在关于64位类型的问题上得到了一些好的答案,但您可能仍然需要针对您特定问题的实用解决方案。我知道的最可靠的解决方案是使用LNUM补丁(也称为Lua整数补丁)构建Lua 5.1,可以从LuaForge下载。如果您没有计划从C源代码构建Lua,则至少有一个纯Lua类库可以处理64位有符号整数-请参见Lua-users wiki。
2009-11-24 14:49:55
stackoverflow用户48940
不,你不能使用 Double 来存储 64 位整数而不会失去精度。
然而,你可以应用一个 Lua 补丁,将真正的 64 位整数支持添加到 Lua 解释器中。将 LNUM 补丁应用到你的 Lua 源代码上并重新编译。
2009-11-24 21:57:37
stackoverflow用户293933
IEEE 754双精度不能精确表示64位整数。但它可以精确表示每一个32位整数值。
IEEE 754 double 不能表示 64 位整数,但可以准确地表示每个 32 位整数值。
2010-04-02 06:17:50
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
不行
至少需要使用 64 位双精度的一些位来表示指数(二进制小数点的位置),因此可用于实际数字的位数少于 64 位。因此,不能使用 64 位双精度表示 64 位整数可以表示的所有值(反之亦然)。