Objective-C 中双精度的范围是多少?

What is the range of a double in Objective-C?

提问人:tombuarts 提问时间:5/2/2011 最后编辑:Cœurtombuarts 更新时间:3/12/2020 访问量:10017

问:

我有一个程序,我正在计算远距离。然后,我使用 stringfromnumber 转换距离(双精度)以插入逗号(即 1,234,567)。只要距离低于 2,000,000,000,这就可以正常工作。每当我超过 20 亿时,我都会得到一个负数,这也不正确的距离。通过检查帮助,我似乎完全在双倍的范围内。

Objective-C 双精度

评论


答:

5赞 Skyler Saleh 5/2/2011 #1

双精度可以容纳从无穷大到负无穷大的任何值。但是,它只能准确地容纳 15 位数字。另外,请记住,如果将其转换为 int,并且 double 存储大于 2,147,483,648 的内容,则 int 将溢出为负数。

评论

7赞 ughoavgfhw 5/2/2011
从无穷大到负无穷大不是一个很好的描述,因为根据无穷大的定义,这在物理上是不可能的。双精度的最大指数为 1023,最小指数为 −1022,因此它可以表示从 2^-1022 到 2^1023 的范围,最多 15 位,以及 ±infinity 和 NaN。
1赞 Skyler Saleh 5/2/2011
这是真的,但大多数人无法理解这个数字的范围有多大(2^1023 个气体原子会装满一个 googol 升的容器),从技术上讲,双精度可以容纳的最大数字是无穷大,双精度可以容纳的最小数字是 -无穷大。
0赞 tombuarts 5/2/2011
感谢您的快速回复。这正是正在发生的事情。有什么方法可以使大于 2,147,483,648 的数字正确显示?
1赞 FeifanZ 5/2/2011
如果你必须投它,试着去一个长。除非你以纳米为单位计算到已知宇宙边缘的距离——即便如此,你也应该设置一个长(或长长)。
1赞 Skyler Saleh 5/2/2011
如果您使用的是 NSNumberFormater...尝试 [numberFormater stringFromNumber:[NSNumber numberWithDouble:doubleVar]];其中 numberFormater 是格式化程序,doubleVar 是变量
8赞 thelaws 5/2/2011 #2

您可以查看自己的以找出答案。我从以下位置获得了 1.797693e+308 的值:float.hDBL_MAX

#include <stdio.h>
#include <float.h>

int main ( void ) {
    printf("Max double %e \n", DBL_MAX);
    return 0;
}