C Primer Plus第121页说,浮点型只能用> 和 < 来比较,那么我要判断 1.5>1.4999怎么办?

startstop2015 2015-09-21 11:00:35
C Primer Plus第121页说,浮点型只能用> 和 < 来比较,那么我要判断 1.5>1.4999怎么办?
...全文
231 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-09-22
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
float f;
double d;
void showf() {
    char bs[65];
    char b[65];
    unsigned char *p;
    char e[12];
    char *t;
    int ex;

    printf("\nf=%.6f\n",f);
    p=(unsigned char *)&f;
    printf("hex=%02X %02X %02X %02X\n",p[3],p[2],p[1],p[0]);
    ltoa(*(long *)&f,b,2);
    sprintf(bs,"%032s",b);
    printf("bin=%s\n",bs);
    printf("bin=%.1s %.8s   %s\n",bs,bs+1,bs+9);
    strncpy(e,bs+1,8);e[8]=0;
    ex=strtol(e,&t,2);
    printf("    %c %-4d-127 1.%s\n",(bs[0]=='0')?'+':'-',ex,bs+9);
    ex-=127;
    printf("    %c %-8d 1.%s\n",(bs[0]=='0')?'+':'-',ex,bs+9);
}
void showd() {
    char bs[65];
    char b[65];
    unsigned char *p;
    char e[12];
    char *t;
    int ex;

    printf("\nd=%.15lf\n",d);
    p=(unsigned char *)&d;
    printf("hex=%02X %02X %02X %02X %02X %02X %02X %02X\n",p[7],p[6],p[5],p[4],p[3],p[2],p[1],p[0]);
    _i64toa(*(__int64 *)&d,b,2);
    sprintf(bs,"%064s",b);
    printf("bin=%s\n",bs);
    printf("bin=%.1s %.11s   %s\n",bs,bs+1,bs+12);
    strncpy(e,bs+1,11);e[11]=0;
    ex=strtol(e,&t,2);
    printf("    %c %-6d-1023 1.%s\n",(bs[0]=='0')?'+':'-',ex,bs+12);
    ex-=1023;
    printf("    %c %-11d 1.%s\n",(bs[0]=='0')?'+':'-',ex,bs+12);
}
int main() {

    for (f=0.0f;f<=2.2f;f+=0.2f) showf();
    printf("------------\n");
    f=2.0f;showf();
    printf("-----------------------------------\n");
    for (d=0.0 ;d<=2.2 ;d+=0.2 ) showd();
    printf("------------\n");
    d=2.0 ;showd();

    return 0;
}
//
//f=0.000000
//hex=00 00 00 00
//bin=00000000000000000000000000000000
//bin=0 00000000   00000000000000000000000
//  + 0   -127 1.00000000000000000000000
//  + -127     1.00000000000000000000000
//
//f=0.200000
//hex=3E 4C CC CD
//bin=00111110010011001100110011001101
//bin=0 01111100   10011001100110011001101
//  + 124 -127 1.10011001100110011001101
//  + -3       1.10011001100110011001101
//
//f=0.400000
//hex=3E CC CC CD
//bin=00111110110011001100110011001101
//bin=0 01111101   10011001100110011001101
//  + 125 -127 1.10011001100110011001101
//  + -2       1.10011001100110011001101
//
//f=0.600000
//hex=3F 19 99 9A
//bin=00111111000110011001100110011010
//bin=0 01111110   00110011001100110011010
//  + 126 -127 1.00110011001100110011010
//  + -1       1.00110011001100110011010
//
//f=0.800000
//hex=3F 4C CC CD
//bin=00111111010011001100110011001101
//bin=0 01111110   10011001100110011001101
//  + 126 -127 1.10011001100110011001101
//  + -1       1.10011001100110011001101
//
//f=1.000000
//hex=3F 80 00 00
//bin=00111111100000000000000000000000
//bin=0 01111111   00000000000000000000000
//  + 127 -127 1.00000000000000000000000
//  + 0        1.00000000000000000000000
//
//f=1.200000
//hex=3F 99 99 9A
//bin=00111111100110011001100110011010
//bin=0 01111111   00110011001100110011010
//  + 127 -127 1.00110011001100110011010
//  + 0        1.00110011001100110011010
//
//f=1.400000
//hex=3F B3 33 34
//bin=00111111101100110011001100110100
//bin=0 01111111   01100110011001100110100
//  + 127 -127 1.01100110011001100110100
//  + 0        1.01100110011001100110100
//
//f=1.600000
//hex=3F CC CC CE
//bin=00111111110011001100110011001110
//bin=0 01111111   10011001100110011001110
//  + 127 -127 1.10011001100110011001110
//  + 0        1.10011001100110011001110
//
//f=1.800000
//hex=3F E6 66 68
//bin=00111111111001100110011001101000
//bin=0 01111111   11001100110011001101000
//  + 127 -127 1.11001100110011001101000
//  + 0        1.11001100110011001101000
//
//f=2.000000
//hex=40 00 00 01
//bin=01000000000000000000000000000001
//bin=0 10000000   00000000000000000000001
//  + 128 -127 1.00000000000000000000001
//  + 1        1.00000000000000000000001
//------------
//
//f=2.000000
//hex=40 00 00 00
//bin=01000000000000000000000000000000
//bin=0 10000000   00000000000000000000000
//  + 128 -127 1.00000000000000000000000
//  + 1        1.00000000000000000000000
//-----------------------------------
//
//d=0.000000000000000
//hex=00 00 00 00 00 00 00 00
//bin=0000000000000000000000000000000000000000000000000000000000000000
//bin=0 00000000000   0000000000000000000000000000000000000000000000000000
//  + 0     -1023 1.0000000000000000000000000000000000000000000000000000
//  + -1023       1.0000000000000000000000000000000000000000000000000000
//
//d=0.200000000000000
//hex=3F C9 99 99 99 99 99 9A
//bin=0011111111001001100110011001100110011001100110011001100110011010
//bin=0 01111111100   1001100110011001100110011001100110011001100110011010
//  + 1020  -1023 1.1001100110011001100110011001100110011001100110011010
//  + -3          1.1001100110011001100110011001100110011001100110011010
//
//d=0.400000000000000
//hex=3F D9 99 99 99 99 99 9A
//bin=0011111111011001100110011001100110011001100110011001100110011010
//bin=0 01111111101   1001100110011001100110011001100110011001100110011010
//  + 1021  -1023 1.1001100110011001100110011001100110011001100110011010
//  + -2          1.1001100110011001100110011001100110011001100110011010
//
//d=0.600000000000000
//hex=3F E3 33 33 33 33 33 34
//bin=0011111111100011001100110011001100110011001100110011001100110100
//bin=0 01111111110   0011001100110011001100110011001100110011001100110100
//  + 1022  -1023 1.0011001100110011001100110011001100110011001100110100
//  + -1          1.0011001100110011001100110011001100110011001100110100
//
//d=0.800000000000000
//hex=3F E9 99 99 99 99 99 9A
//bin=0011111111101001100110011001100110011001100110011001100110011010
//bin=0 01111111110   1001100110011001100110011001100110011001100110011010
//  + 1022  -1023 1.1001100110011001100110011001100110011001100110011010
//  + -1          1.1001100110011001100110011001100110011001100110011010
//
//d=1.000000000000000
//hex=3F F0 00 00 00 00 00 00
//bin=0011111111110000000000000000000000000000000000000000000000000000
//bin=0 01111111111   0000000000000000000000000000000000000000000000000000
//  + 1023  -1023 1.0000000000000000000000000000000000000000000000000000
//  + 0           1.0000000000000000000000000000000000000000000000000000
//
//d=1.200000000000000
//hex=3F F3 33 33 33 33 33 33
//bin=0011111111110011001100110011001100110011001100110011001100110011
//bin=0 01111111111   0011001100110011001100110011001100110011001100110011
//  + 1023  -1023 1.0011001100110011001100110011001100110011001100110011
//  + 0           1.0011001100110011001100110011001100110011001100110011
//
//d=1.400000000000000
//hex=3F F6 66 66 66 66 66 66
//bin=0011111111110110011001100110011001100110011001100110011001100110
//bin=0 01111111111   0110011001100110011001100110011001100110011001100110
//  + 1023  -1023 1.0110011001100110011001100110011001100110011001100110
//  + 0           1.0110011001100110011001100110011001100110011001100110
//
//d=1.600000000000000
//hex=3F F9 99 99 99 99 99 99
//bin=0011111111111001100110011001100110011001100110011001100110011001
//bin=0 01111111111   1001100110011001100110011001100110011001100110011001
//  + 1023  -1023 1.1001100110011001100110011001100110011001100110011001
//  + 0           1.1001100110011001100110011001100110011001100110011001
//
//d=1.800000000000000
//hex=3F FC CC CC CC CC CC CC
//bin=0011111111111100110011001100110011001100110011001100110011001100
//bin=0 01111111111   1100110011001100110011001100110011001100110011001100
//  + 1023  -1023 1.1100110011001100110011001100110011001100110011001100
//  + 0           1.1100110011001100110011001100110011001100110011001100
//
//d=2.000000000000000
//hex=3F FF FF FF FF FF FF FF
//bin=0011111111111111111111111111111111111111111111111111111111111111
//bin=0 01111111111   1111111111111111111111111111111111111111111111111111
//  + 1023  -1023 1.1111111111111111111111111111111111111111111111111111
//  + 0           1.1111111111111111111111111111111111111111111111111111
//
//d=2.200000000000000
//hex=40 01 99 99 99 99 99 99
//bin=0100000000000001100110011001100110011001100110011001100110011001
//bin=0 10000000000   0001100110011001100110011001100110011001100110011001
//  + 1024  -1023 1.0001100110011001100110011001100110011001100110011001
//  + 1           1.0001100110011001100110011001100110011001100110011001
//------------
//
//d=2.000000000000000
//hex=40 00 00 00 00 00 00 00
//bin=0100000000000000000000000000000000000000000000000000000000000000
//bin=0 10000000000   0000000000000000000000000000000000000000000000000000
//  + 1024  -1023 1.0000000000000000000000000000000000000000000000000000
//  + 1           1.0000000000000000000000000000000000000000000000000000
//
Saleayas 2015-09-22
  • 打赏
  • 举报
回复
1.5>1.4999 这个为true,不需要程序去判断。 如果你使用变量来判断,那么你的程序肯定会有精度的要求。 此时需要依据你的精度来判断。 在实际使用的过程中,同样一个结果,在不同的时候是不一致的。
yajuie 2015-09-22
  • 打赏
  • 举报
回复
引用 6 楼 paschen的回复:
书想表达的意思是最好不要用==、!=这种运算符判断浮点数是否相等,因为可能有精度误差导致问题,判断相等建议判断两浮点数相减绝对值是否小于一个很小的数
学习了,刚入门学习,还真没注意这方面问题
paschen 2015-09-21
  • 打赏
  • 举报
回复
书想表达的意思是最好不要用==、!=这种运算符判断浮点数是否相等,因为可能有精度误差导致问题,判断相等建议判断两浮点数相减绝对值是否小于一个很小的数
startstop2015 2015-09-21
  • 打赏
  • 举报
回复
引用 3 楼 zhangxiangDavaid 的回复:
照样使用 if(5.01 >= 5.001)
C PRIMER PLUS第5版,第121页说,浮点型只能用> 和 < 来比较
gh_99 2015-09-21
  • 打赏
  • 举报
回复
浮点型应该能判断 >= <= 如果你有问题可以写代码直接运行检验一下。
苏叔叔 2015-09-21
  • 打赏
  • 举报
回复
照样使用 if(5.01 >= 5.001)
startstop2015 2015-09-21
  • 打赏
  • 举报
回复
引用 1 楼 zhangxiangDavaid 的回复:
直接 if(1.5 > 1.4999)
我说错了,我是说我要判断 5.01>=5.001怎么办? 难道浮点型没法判断 >= <=了?
苏叔叔 2015-09-21
  • 打赏
  • 举报
回复
直接 if(1.5 > 1.4999)
bear234 2015-09-21
  • 打赏
  • 举报
回复
5.01>=5.001 这当然可以啦 浮点数做比较运算的时候问题通常是这样产生的:1.23 == 1.23 这大多数时候是false 因为精度问题,你只给出小数后两位有效数字,而编译器处理double显然不止两位 在这个时候,正确的做法是: a - b <= 0.001 如果这个是true,则视为a==b 你可以通过修改0.001来确定一个可以满足你需要的精度
赵4老师 2015-09-21
  • 打赏
  • 举报
回复
Memory4ever 2015-09-21
  • 打赏
  • 举报
回复
浮点数精度不同,如果等的话很危险...
内容概要:本文介绍了DeepSeek在职场中的应用,从提示语技巧到多场景应用,涵盖了DeepSeek的基础模型(V3)、深度思考模型(R1)及其联网搜索功能。文中详细描述了DeepSeek的模型对比,包括操作规范、结果导向、路径灵活性、响应模式和风险特征等方面。此外,还探讨了DeepSeek在制作可视化图表、PPT、海报、视频以及批量生成新媒体文案等具体应用场景中的使用方法和技巧。最后,文章展示了DeepSeek在市场调查、AI应用开发等方面的应用实例,强调了其在人机协同和共生领域的潜力。 适用人群:适用于希望提升工作效率和创新能力的职场人士,特别是从事数据分析、内容创作、市场营销、AI开发等领域的专业人士。 使用场景及目标:①通过DeepSeek的基础模型(V3)和深度思考模型(R1)进行高效的任务处理和复杂推理;②利用DeepSeek制作可视化图表、PPT、海报和视频,提高内容创作的质量和效率;③通过DeepSeek进行市场调查和AI应用开发,优化业务流程并推动创新。 其他明:DeepSeek不仅提供了强大的AI工具,还强调了人机协同的重要性。用户在使用过程中应注意操作规范,结合实际需求选择合适的模型,并充分利用DeepSeek的各项功能来实现高效的职场应用。文中还提到了多个国际竞赛中的获奖情况,展示了DeepSeek团队在AI领域的卓越实力。

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧