【发布时间】:2012-06-06 03:37:14
【问题描述】:
#include <stdio.h>
int main()
{
long double n = (long double)1208925819614629174706175; // (1<<80)-1 (generated in python)
printf("%LG\n",n);
}
使用 gcc 编译时,我收到警告
test.c:5:31: warning: integer constant is too large for its type [enabled by default]
在运行时打印-1
在执行sizeof(long double) 时,它会打印12。
所以签名的long double 应该容纳 (1 对吧?
如何让它正常工作?
PS:我正在处理的原始问题是处理存储大至 12*(1018) 的有符号整数。我不想编写乘法、加法和其他计算例程。那我该怎么做呢?
【问题讨论】:
-
“我处理的原始问题是存储带符号的整数。”你知道
long double不是整数类型吗? -
我才意识到!好吧,你能建议一些方法,以便我可以存储 12*(10**18) 而不使用数组作为数字吗?是否存在任何方法?
-
Long double 将处理 10**300 及以上,这不是编译器所抱怨的。它表示您尝试转换为 long 的整数对于整数来说太大了。 (提示 - 添加小数点)
-
如果你想存储最多 12*(10^18) 的整数,为什么不使用
unsigned long long,它最多可以存储~18*(10^18)。你可能想使用常量类型说明符,像这样:1.5f (float), 100ll (long long) -
@saeedn 我已经尝试过
unsigned long long,但无济于事。不管怎样,看来我得自己想办法了!
标签: c gcc type-conversion linux-mint