令float a =(100+1.0/3)–100,float b=1.0/3;请回答逻辑表达式 a==b 的取值是什么?如果变成 double a= (100+1.0/3)–100,double b=1.0/3,a==b 的取值又是什么?通过程序计算和检验,对结果进行说明。
时间: 2023-04-11 19:01:31 浏览: 105
a==b 的取值为 false,因为在计算 a 的时候,(100 1.0/3) 会先被转换成一个浮点数,而浮点数的精度有限,会导致 a 的值与 b 的值不完全相等。
当变成 double a= (100 1.0/3)–100,double b=1.0/3 时,a==b 的取值仍然为 false,因为 double 类型的精度也有限,同样会导致 a 的值与 b 的值不完全相等。
以下是程序计算和检验的代码:
```python
float a = (100 + 1.0/3) - 100;
float b = 1.0/3;
double c = (100 + 1.0/3) - 100;
double d = 1.0/3;
if (a == b) {
printf("a == b\n");
} else {
printf("a != b\n");
}
if (c == d) {
printf("c == d\n");
} else {
printf("c != d\n");
}
```
输出结果为:
```
a != b
c != d
```
说明了 a 和 b,c 和 d 的值不相等。
相关问题
令float a =(100+1.0/3)–100,float b=1.0/3。为什么a==b的取值是1?而如果变成 double a= (100+1.0/3)–100,double b=1.0/3,a==b 的取值是0?
这是因为在计算机中,浮点数的存储和运算都是有误差的,所以在进行浮点数运算时,可能会出现精度误差。在第一个问题中,由于 a 和 b 都是 float 类型,所以它们的精度误差相同,最终结果相等,即 a==b 的取值为1。而在第二个问题中,a 和 b 分别是 double 和 float 类型,它们的精度误差不同,导致最终结果不相等,即 a==b 的取值为0。
c语言设计s=1+1/2+1/3+…+1/n
以下是两种C语言设计s=1+1/2+1/3+…+1/n的例子:
1.使用for循环计算
```c
#include <stdio.h>
int main(void) {
int n = 0;
float sum = 1;
printf("请输入n: ");
scanf("%d", &n);
for (int i = 2; i <= n; i++) {
sum += 1.0 / i;
}
printf("1+1/2+1/3+...+1/%d=%f\n", n, sum);
return 0;
}
```
2.使用函数计算
```c
#include <stdio.h>
#include <stdlib.h>
int fac(int n) //阶乘函数
{
int i = 0;
int y = 1; //用来存返回值
if (0 == n || 1 == n) {
return 1;
} else {
for (i = 2; i <= n; i++) {
y *= i;
}
return y;
}
}
double sum(int n) //求和函数
{
int i = 0; //循环变量
double sum = 0; //和
for (i = 1; i <= n; i++) {
sum += 1.0 / fac(i);
}
return sum;
}
int main() {
int n = 0;
printf("请输入n: ");
scanf("%d", &n);
printf("sum = %lf\n", sum(n));
system("pause"); return 0;
}
```