首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用浮点型或双精度型而不是整型

使用浮点型或双精度型而不是整型
EN

Stack Overflow用户
提问于 2011-05-19 22:41:26
回答 2查看 2.6K关注 0票数 5

我知道Lua的默认实现只使用浮点数,从而避免了在选择要使用的数学函数变体之前动态确定数字的子类型的问题。

我的问题是--如果我试图在标准C99中将整数模拟为双精度(或浮点数),有没有一种可靠(且简单)的方法来精确地确定可以精确表示的最大值是多少?

我的意思是,如果我使用64位浮点数来表示整数,我当然不能表示所有的64位整数(这里适用鸽洞原理)。如何判断可表示的最大整数?

(尝试列出所有值不是一种解决方案--例如,如果我在64位体系结构中使用doubles,因为我必须列出2^{64}个数字)

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2011-05-19 22:50:52

IEEE floating point wikipage说:

通过将原始二进制值转换为十进制值并使用以下命令再次返回,将保留原始二进制值:

  • 5用于binary16
  • 的十进制数字9用于binary32
  • 的十进制数字17用于binary64
  • 的十进制数字36用于binary128

的十进制数字

票数 1
EN

Stack Overflow用户

发布于 2011-05-19 23:04:13

如果你正在看一个从int到float再到int的转换,在我的系统上,它在16,777,217左右崩溃(double没有任何问题):

代码语言:javascript
复制
#include <stdio.h>
#include <limits.h>

int main (void)
{
  long in, out;
  double d;
  float f;

  for (in=0; in < (LONG_MAX); in++) {
    d=in;
    f=in;
    out=d;
    if (in != out) {
      printf ("Double conversion imprecise for %ld\n", in);
    }
    out=f;
    if (in != out) {
      printf ("Float conversion imprecise for %ld\n", in);
    }
  }
  return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6060406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档