gpt4 book ai didi

c - 如何使用直接计算确定浮点类型的范围?

转载 作者:太空狗 更新时间:2023-10-29 17:12:04 26 4
gpt4 key购买 nike

我正在尝试解决“The C Programming Language”第 2 版中的练习 2-1,它要求:

“编写一个程序来确定 char、short、int 和 long 变量的范围,包括有符号的和无符号的,通过从标准头打印适当的值并通过直接计算。如果你计算它们更难:确定各种浮点类型。”

我已经设法通过使用标准 header 中的最小值和最大值以及直接计算来确定除 float 以外的所有类型的范围。

如何使用直接计算确定浮点类型的范围?

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

#define TESTBIT 2

/* write a program to determine the ranges of char, short, int, and long variables,
both signed and unsigned by printing appropriate values from standard headers
and by direct computation

harder if you compute them - determine the ranges of the various floating-point types */
main()
{
char ch, chtest;
unsigned char uch;
short sh, shtest;
unsigned short ush;
int i, itest;
unsigned int ui;
long l, ltest;
unsigned long ul;
long long ll, lltest;
unsigned long long ull;

ch = uch = sh = ush = i = ui = l = ul = ll = ull = 0;
++ch; /* Maximum and minimum ranges using direct computation */
chtest = 0;
while (chtest >= 0) {
chtest = ch * TESTBIT;
if (chtest > 0)
ch = ch * TESTBIT;
}
ch = ch * 2;
printf("Minimum range of signed char variable: %d\n", ch);

--ch;
printf("Maximum range of signed char variable: %d\n", ch);

--uch;
printf("Maximum range of unsigned char variable: %u\n", uch);

++sh;
shtest = 0;
while (shtest >= 0) {
shtest = sh * TESTBIT;
if (shtest > 0)
sh = sh * TESTBIT;
}
sh = sh * 2;
printf("Minimum range of signed short variable: %d\n", sh);

--sh;
printf("Maximum range of signed short variable: %d\n", sh);

--ush;
printf("Maximum range of unsigned short variable: %u\n", ush);

++i;
itest = 0;
while (itest >= 0) {
itest = i * TESTBIT;
if (itest > 0)
i = i * TESTBIT;
}
i = i * 2;
printf("Minimum range of signed int variable: %d\n", i);

--i;
printf("Maximum range of signed int variable: %d\n", i);

--ui;
printf("Maximum range of unsigned int variable: %u\n", ui);

++l;
ltest = 0;
while (ltest >= 0) {
ltest = l * TESTBIT;
if (ltest > 0)
l = l * TESTBIT;
}
l = l * 2;
printf("Minimum range of signed long variable: %d\n", l);

--l;
printf("Maximum range of signed long variable: %d\n", l);

--ul;
printf("Maximum range of unsigned long variable: %lu\n", ul);

++ll;
lltest = 0;
while (lltest >= 0) {
lltest = ll * TESTBIT;
if (lltest > 0)
ll = ll * TESTBIT;
}
ll = ll * 2;
printf("Minimum range of signed long long variable: %lld\n", ll);

--ll;
printf("Maximum range of signed long long variable: %lld\n", ll);

--ull;
printf("Maximum range of unsigned long long variable: %llu\n", ull);

printf("\nSize of char: %d\n", CHAR_BIT); /* Max and min ranges using limits.h and float.h header */
printf("Minimum range of signed char variable: %d\n", SCHAR_MIN);
printf("Maximum range of signed char variable: %d\n", SCHAR_MAX);
printf("Maximum range of unsigned char variable: %u\n", UCHAR_MAX);
printf("Minimum range of signed short variable: %d\n", SHRT_MIN);
printf("Maximum range of signed short variable: %d\n", SHRT_MAX);
printf("Maximum range of unsigned short variable: %u\n", USHRT_MAX);
printf("Minimum range of int variable: %d\n", INT_MIN);
printf("Maximum range of int variable: %d\n", INT_MAX);
printf("Maximum range of unsigned int variable: %u\n", UINT_MAX);
printf("Minimum range of signed long variable: %ld\n", LONG_MIN);
printf("Maximum range of signed long variable: %ld\n", LONG_MAX);
printf("Maximum range of unsigned long variable: %lu\n", ULONG_MAX);
printf("Minimum range of long long variable: %lld\n", LLONG_MIN);
printf("Maximum range of long long variable: %lld\n", LLONG_MAX);
printf("Maximum range of unsigned long long variable: %llu\n\n", ULONG_LONG_MAX);
printf("Minimum range of float variable: %f\n", FLT_MIN);
printf("Maximum range of float variable: %f\n", FLT_MAX);
printf("Minimum range of double variable: %f\n", DBL_MIN);
printf("Maximum range of double variable: %f\n", DBL_MAX);
printf("Minimum range of long double variable: %lf\n", LDBL_MIN);
printf("Maximum range of long double variable: %lf\n", LDBL_MAX);
return 0;
}

最佳答案

#include <stdio.h>

main()
{
float fl, fltest, last;
double dbl, dbltest, dblast;

fl = 0.0;
fltest = 0.0;
while (fl == 0.0) {
last = fltest;
fltest = fltest + 1111e28;
fl = (fl + fltest) - fltest;
}
printf("Maximum range of float variable: %e\n", last);

dbl = 0.0;
dbltest = 0.0;
while (dbl == 0.0) {
dblast = dbltest;
dbltest = dbltest + 1111e297;
dbl = (dbl + dbltest) - dbltest;
}
printf("Maximum range of double variable: %e\n", dblast);
return 0;
}

关于c - 如何使用直接计算确定浮点类型的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8305967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com