C语言的高精度乘法,用万进制不妥?

时间:2021-09-03 03:34:33
int最大是32767,而书本说用万进制。10000的平方不是大过32767了吗?怎么能用啊?大家做乘法是怎么做的?

26 个解决方案

#1


请不要拿20年前的机器开玩笑...

#2


所以出现了long,float,double等等更高精度的类型。

#3


除了int 还有long型啊,如果还是不够用,还可以使用字串来代表数字。你希望精度有多少都可以。

#4


现在int一般有32位了 你得考虑换个编译器了

#5


引用 1 楼 mlee79 的回复:
请不要拿20年前的机器开玩笑...

严重同意,LZ用的是16位的编译器,现在32位的数值范围:
Type Size (bits) Range Sample applications
unsigned char 8 0 <= X <= 255 Small numbers and full PC character set
char 8 -128 <= X <= 127 Very small numbers and ASCII characters
short int 16 -32,768 <= X <= 32,767 Counting, small numbers, loop control
unsigned int 32 0 <= X <= 4,294,967,295 Large numbers and loops
int 32   -2,147,483,648 <= X <= 2,147,483,647 Counting, small numbers, loop control
unsigned long 32    0 <= X <= 4,294,967,295 Astronomical distances
enum 32 -2,147,483,648 <= X <= 2,147,483,647 Ordered sets of values
long 32   -2,147,483,648 <= X <= 2,147,483,647 Large numbers, populations
float 32   1.18 10^-38 < |X| < 3.40 10^38 Scientific (7-digit) precision)
double 64 2.23 10^-308 < |X| < 1.79??10^308 Scientific (15-digit precision)
long double 80 3.37 10^-4932 < |X| < 1.18 10^4932 Financial (18-digit precision)

#6


某些编译器还支持:
long long(或__int64)  –9,223,372,036,854,775,808 <=X<= 9,223,372,036,854,775,807
unsigned long long  0  <=X<= 18,446,744,073,709,551,615

#7


uintmax_t / intmax_t 任意大的整数都可以

#8


引用 1 楼 mlee79 的回复:
请不要拿20年前的机器开玩笑...

同意
int目前基本都是32位的
取值范围是 -2^31+1 --- 2^31-1

#9


STOP!我是想做高精度算法乘法的程序!

#10


楼主什么CPU啊,不会是单片机什么的吧?

#11


整数不谈精度,差个位数就完全不对...

#12


STOP!我是想做高精度算法乘法的程序!算法书说的是32767,我觉得它说的不对而已。

#13


问题是你C语言基础先得过关啊。

#14


ls怎么又说我基础不过关呢?

#15


引用 1 楼 mlee79 的回复:
请不要拿20年前的机器开玩笑...

一楼亮了~

#16


用int数组,自己写加减乘除的函数,要多大有多大
具体请google c语言大数运算

#17


因为
十进制的意思就是每一位数字用0~9共十个不同的符号表示,你用小学三年级的乘法竖式计算任意位十进制数时中间出现过0~9以外的符号吗?
所以
万进制的意思就是每一位数字用0000~9999共一万个不同的符号表示,你用小学三年级的乘法竖式计算任意位万进制数时中间绝对不会出现0000~9999以外的符号!

#18


到底有没有人知道我问什么的?!我说书本的指的环境是16位,INT(max)是32767,而它用万进!

#19


万进制有虾米不妥的, 32位机大家都用 1E8 进制也木啥不妥啊...

#20


万进制

是不是让你用2个 int 变量,一个专门用来做高于10000的进位

#21


没有,它是直接用万进,int数组表示。我知道如果在三十二位机他的代码没问题,但如果有人用TC(那书用的环境)的话…故此提问:是不是书的代码质量不行

#22


与书的代码质量无关,而是那书已太老过时了

#23


还在讲int最大到32767的书直接扔了就行了。
生命可贵。

#24


呵呵,这个想法不错,能不能举一个例子让我等开开眼?
引用 3 楼 evanxgsh 的回复:
除了int 还有long型啊,如果还是不够用,还可以使用字串来代表数字。你希望精度有多少都可以。

#25


引用 18 楼 ccnyou 的回复:
到底有没有人知道我问什么的?!我说书本的指的环境是16位,INT(max)是32767,而它用万进!

那就问问写书的人是咋弄的

#26


引用 18 楼 ccnyou 的回复:
到底有没有人知道我问什么的?!我说书本的指的环境是16位,INT(max)是32767,而它用万进!

我的是32位的,也可以用intmax_t类型的,c99规定的,这个类型好像没有上限,和你的环境没有关系

#1


请不要拿20年前的机器开玩笑...

#2


所以出现了long,float,double等等更高精度的类型。

#3


除了int 还有long型啊,如果还是不够用,还可以使用字串来代表数字。你希望精度有多少都可以。

#4


现在int一般有32位了 你得考虑换个编译器了

#5


引用 1 楼 mlee79 的回复:
请不要拿20年前的机器开玩笑...

严重同意,LZ用的是16位的编译器,现在32位的数值范围:
Type Size (bits) Range Sample applications
unsigned char 8 0 <= X <= 255 Small numbers and full PC character set
char 8 -128 <= X <= 127 Very small numbers and ASCII characters
short int 16 -32,768 <= X <= 32,767 Counting, small numbers, loop control
unsigned int 32 0 <= X <= 4,294,967,295 Large numbers and loops
int 32   -2,147,483,648 <= X <= 2,147,483,647 Counting, small numbers, loop control
unsigned long 32    0 <= X <= 4,294,967,295 Astronomical distances
enum 32 -2,147,483,648 <= X <= 2,147,483,647 Ordered sets of values
long 32   -2,147,483,648 <= X <= 2,147,483,647 Large numbers, populations
float 32   1.18 10^-38 < |X| < 3.40 10^38 Scientific (7-digit) precision)
double 64 2.23 10^-308 < |X| < 1.79??10^308 Scientific (15-digit precision)
long double 80 3.37 10^-4932 < |X| < 1.18 10^4932 Financial (18-digit precision)

#6


某些编译器还支持:
long long(或__int64)  –9,223,372,036,854,775,808 <=X<= 9,223,372,036,854,775,807
unsigned long long  0  <=X<= 18,446,744,073,709,551,615

#7


uintmax_t / intmax_t 任意大的整数都可以

#8


引用 1 楼 mlee79 的回复:
请不要拿20年前的机器开玩笑...

同意
int目前基本都是32位的
取值范围是 -2^31+1 --- 2^31-1

#9


STOP!我是想做高精度算法乘法的程序!

#10


楼主什么CPU啊,不会是单片机什么的吧?

#11


整数不谈精度,差个位数就完全不对...

#12


STOP!我是想做高精度算法乘法的程序!算法书说的是32767,我觉得它说的不对而已。

#13


问题是你C语言基础先得过关啊。

#14


ls怎么又说我基础不过关呢?

#15


引用 1 楼 mlee79 的回复:
请不要拿20年前的机器开玩笑...

一楼亮了~

#16


用int数组,自己写加减乘除的函数,要多大有多大
具体请google c语言大数运算

#17


因为
十进制的意思就是每一位数字用0~9共十个不同的符号表示,你用小学三年级的乘法竖式计算任意位十进制数时中间出现过0~9以外的符号吗?
所以
万进制的意思就是每一位数字用0000~9999共一万个不同的符号表示,你用小学三年级的乘法竖式计算任意位万进制数时中间绝对不会出现0000~9999以外的符号!

#18


到底有没有人知道我问什么的?!我说书本的指的环境是16位,INT(max)是32767,而它用万进!

#19


万进制有虾米不妥的, 32位机大家都用 1E8 进制也木啥不妥啊...

#20


万进制

是不是让你用2个 int 变量,一个专门用来做高于10000的进位

#21


没有,它是直接用万进,int数组表示。我知道如果在三十二位机他的代码没问题,但如果有人用TC(那书用的环境)的话…故此提问:是不是书的代码质量不行

#22


与书的代码质量无关,而是那书已太老过时了

#23


还在讲int最大到32767的书直接扔了就行了。
生命可贵。

#24


呵呵,这个想法不错,能不能举一个例子让我等开开眼?
引用 3 楼 evanxgsh 的回复:
除了int 还有long型啊,如果还是不够用,还可以使用字串来代表数字。你希望精度有多少都可以。

#25


引用 18 楼 ccnyou 的回复:
到底有没有人知道我问什么的?!我说书本的指的环境是16位,INT(max)是32767,而它用万进!

那就问问写书的人是咋弄的

#26


引用 18 楼 ccnyou 的回复:
到底有没有人知道我问什么的?!我说书本的指的环境是16位,INT(max)是32767,而它用万进!

我的是32位的,也可以用intmax_t类型的,c99规定的,这个类型好像没有上限,和你的环境没有关系