Comparison of a float with a value in C

2023-10-27

Predict the output of following C program.

#include<stdio.h>
int main()
{
     float x = 0.1;
     if (x == 0.1)
         printf ( "IF" );
     else if (x == 0.1f)
         printf ( "ELSE IF" );
     else
         printf ( "ELSE" );
}

The output of above program is “ELSE IF” which means the expression “x == 0.1″ returns false and expression “x == 0.1f” returns true.

Let consider the of following program to understand the reason behind the above output.

#include<stdio.h>
int main()
{
    float x = 0.1;
    printf ( "%d %d %d" , sizeof (x), sizeof (0.1), sizeof (0.1f));
    return 0;
}

The output of above program is “4 8 4” on a typical C compiler. It actually prints size of float, size of double and size of float.

The values used in an expression are considered as double (double precision floating point format) unless a ‘f’ is specified at the end. So the expression “x==0.1″ has a double on right side and float which are stored in a single precision floating point format on left side. In such situations float is promoted to double (seethis). The double precision format uses uses more bits for precision than single precision format.
Note that the promotion of float to double can only cause mismatch when a value (like 0.1) uses more precision bits than the bits of single precision. For example, the following C program prints “IF”.

#include<stdio.h>
int main()
{
     float x = 0.5;
     if (x == 0.5)
         printf ( "IF" );
     else if (x == 0.5f)
         printf ( "ELSE IF" );
     else
         printf ( "ELSE" );
}

Output:

IF

You can refer Floating Point Representation – Basics for representation of floating point numbers.

This article is contributed by Abhay Rathi. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Comparison of a float with a value in C 的相关文章

  • C#中unsafe的使用

    1 unsafe在C 程序中的使用场合 实时应用 采用指针来提高性能 引用非 net DLL提供的如C 编写的外部函数 需要指针来传递该函数 调试 用以检测程序在运行过程中的内存使用状况 2 使用unsafe的利弊 好处是 性能和灵活性提高
  • Qt5实现与单片机ATS89S51通信

    Qt实现与单片机直接的通信上位机 单片机代码 测试环境 项目目标 实现效果 关键通信类 QSerialport 总结 这是我大二下学期的单片机课设做的一个小项目 实现上位机与下位机之间的通信 测试环境 开发环境 Qt5 96 Mingw32
  • C++操作SQLite数据库

    准备工作 在使用C 操作SQLite之前 需要获得sqlite3 h sqlite3 lib sqlite3 dll 大家可以在 这里 下载 并将这3个文件导入VC 工程中 其中sqlite3 dll文件放到Debug文件夹里 SQLite
  • C++知识积累:内存对齐理解

    为什么要进行内存对齐 这是因为CPU的读取总是对齐的 举个例子 假设CPU是32位的 那么CPU每次读取的4字节数据的首地址都是4的倍数 也就是说 内存中数据首地址为4的倍数时 CPU一次操作就可以完成数据读取 假设有一个int型四字节大小
  • std::nth_element bug引起的crash问题

    1 源码 auto less compare const MirroringGroup mg1 const MirroringGroup mg2 gt bool return mg1 usage lt mg2 usage std nth e
  • 无法打开源文件<sys/time.h>,但是用time.h编译就会出错,缺少gettimeofday()

    因为sys time h是uinx系统下的库文件 而现在使用的平台是在windows 由于未指明程序运行的系统 导致找不到对应的头文件 需要重新实现gettimeofday 函数 define WIN32 include
  • C/C++ 引用作为函数的返回值

    语法 类型 函数名 形参列表 函数体 特别注意 1 引用作为函数的返回值时 必须在定义函数时在函数名前将 2 用引用作函数的返回值的最大的好处是在内存中不产生返回值的副本 代码来源 RUNOOB include
  • 使用QZXing生成并解析二维码

    QZxing 是对 zxing 的一个封装 用于在 Qt 程序中加入条形码和二维码识别的功能 这里就讲讲如何编译和使用这个库 前几年 QZXing 的代码是放到 sourceforge net 上的 现在迁移到了 github com 所以
  • 经典面试题之new和malloc的区别

    new和malloc的区别是C C 一道经典的面试题 我也遇到过几次 回答的都不是很好 今天特意整理了一下 0 属性 new delete是C 关键字 需要编译器支持 malloc free是库函数 需要头文件支持 1 参数 使用new操作
  • vector,list,deque区别

    http blog csdn net renkaihao article details 6803866 vector和built in数组类似 它拥有一段连续的内存空间 并且起始地址不变 因此它能非常好的支持随即存取 即 操作符 但由于它
  • 【干货】Chrome插件(扩展)开发全攻略(不点进来看看你肯定后悔)<转>

    干货 Chrome插件 扩展 开发全攻略 不点进来看看你肯定后悔 写在前面 我花了将近一个多月的时间断断续续写下这篇博文 并精心写下完整demo 写博客的辛苦大家懂的 所以转载务必保留出处 本文所有涉及到的大部分代码均在这个demo里面 h
  • Trace Function Enter, Exit and Leave

    http developer nokia com community wiki Trace Function Enter Exit and Leave
  • mfc窗口创建的create与oncreate

    在view类中 create 是虚函数由框架调用 是用来 生成一个窗口的子窗口 oncreate 消息响应函数 是用来 表示一个窗口正在生成 某个CWnd的Create函数由当前CWnd的Owner调用 而在CWnd Create中 又会调
  • C++:指向类的成员的指针

    引 想必接触过C的朋友们对C语言中指针的概念已经有了深入的了解 如果初步进行了解的朋友可以看一下 C语言基础学习笔记 指针展开来讲的基本知识点包括 指针的概念 指针的定义和初始化及简单使用 指针函数和函数指针 有关指针函数和函数指针的内容上
  • 【C/C++】 - Linux下查找函数头文件 以及 man命令拓展

    背景 比如现在需要找C语言 sleep函数的头文件 使用man来查找 可以先man sleep 可以发现出来的默认是sleep 1 是一个User Commands 明显不是我们需要的 这里提示了 看sleep 3 那我们查看下sleep
  • 检查内存泄露

    自己编写的视频处理程序出现了一个问题 每帧的运行时间随着运行时间在不断增长 很大可能是出现了内存泄露 于是学习了一些查看内存泄露的方法 做了两种尝试 一是VS自带的DEBUG下的检测 view pl html view plain copy
  • C/C++编程:令人印象深刻的高级技巧案例

    C C 编程语言在软件开发领域有着悠久的历史 由于其高效 灵活和底层访问能力 至今仍然被广泛应用 本文将介绍一些在C C 编程中令人印象深刻的高级技巧 帮助读者提升编程水平 更加高效地使用这两种强大的编程语言 一 指针运算与内存管理 C C
  • C++中的引用

    一 引用的概念 引用不是新定义一个变量 而是给已有变量取一个别名 编译器不会为引用变量开辟内存空间 而和它引用的变量共用一块内存空间 注意 由于C 兼容C 所以 既可以是引用符号 也可以是取地址 int a 0 int b a cout l
  • C++实现函数重载的原理

    一 函数重载的概念 C 中允许存在同名函数 但要求函数参数的类型 个数不同 这些同名函数就称为函数的重载 void func int a int b cout lt lt func int a int b lt lt endl void f
  • Woocommerce:添加第二个电子邮件地址不起作用,除非收件人是管理员

    我尝试了多种方法来向 Woocommerce 电子邮件添加其他收件人 但它似乎仅适用于主要收件人是管理员的测试订单 这些是我尝试过的片段 如果订单的客户是管理员 则电子邮件将发送到这两个地址 如果订单包含客户电子邮件地址 则仅发送至该电子邮

随机推荐

  • HTML5拖放API之回收站效果,HTML5拖放API

    1 拖放的步骤 1 对象元素的draggable属性设置为true draggable true 还需要注意的是a元素和img元素必须指定href 2 编写与拖放有关的事件处理代码 事件 产生事件的元素 描述 dragstart 被拖放的元
  • C# 连接SQLServer数据库及登录验证知识

    最近在做联系数据库的系统项目 这里重新回顾了一些数据库的知识 主要是使用VS2012与SQL Server 2012简单的做了下面两个数据库的应用 虽然比较简单 但我认为这是非常有用的知识 尤其对刚接触这样的系统知识的同学 同时也巩固了自己
  • 无法访问com.fasterxml.jackson.databind.JavaType找不到com.fasterxml.jackson.databind.JavaType的类文件

    在Spring Data Redis项目整合中更换序列化器存储引用数据类型时报如下的错误 Error 67 42 java 无法访问com fasterxml jackson databind JavaType 找不到com fasterx
  • Knowledge Graph Prompting for Multi-Document Question Answering

    本文是LLM系列文章 针对 Knowledge Graph Prompting for Multi Document Question Answering 的翻译 多文档问答中的知识图谱提示 摘要 1 引言 2 符号 3 知识图谱构建 4
  • jquery中获取下拉框的文本值和value值(键值)

  • IDEA 代码没错但是编译出错解决办法

    上午运行项目的时候突然编译器崩了 找了半天原因终于找到了元凶 因为项目是UTF 8格式 但是检查 idea encodings xml是否对某些类指定了charset gbk 如果有的话 删除charset即可 其他的一些寻常的编译错误网上
  • Java高频面试复习题,助你吊打面试官

    前言 2022年对程序员来说是特别严峻的一年 也是大改革的一年 大部分人因为今年 疫情 的原因纷纷离开了自己原有的岗位 也有人抓住机会逆流而上拿到更高的待遇 2022年金九银十已经到来了 试问你进入了自己心仪的企业了吗 拿到自己满意的薪资待
  • Send Mail

    using System using System Web Mail using System Configuration using System Web using System IO using DAL namespace BLL
  • 2023华为OD机试真题Python实现【密室逃生游戏】

    题目描述 小强正在参加 密室逃生 游戏 当前关卡要求找到符合给定密码K 升序的不重复小写字母组成 的箱子 并给出箱子编号 箱子编号为1 N 每个箱子中都有一个字符串s 字符串由大写字母 小写字母 数字 标点符号 空格组成 需要在这些字符串中
  • Echarts+jquery实现复杂的渐变色仪表盘

    ECharts 一个纯 Javascript 的图表库 可以流畅的运行在 PC 和移动设备上 Echarts提供了很多的图表 像是仪表图 关联图等 代码比较好上手 有很多配置项 下面是我记录我做过的仪表盘 效果图 需求 1 颜色渐变效果 2
  • 从 Java 到 Go:搭建问答社区后端的过渡之旅

    目录 目录 1 项目概述 2 环境准备 2 1 安装依赖 3 从 Java 到 Go 的基础知识
  • uni-app离开当前页面后,video组件依然播放视频

    问题 页面中使用了video组件 点击播放后 切换到其他页面 视频仍在播放 可以听见声音 目前采用的方法
  • 智能五子棋-C语言

    一 项目需求 五子棋是一种简单的黑白棋 历史悠久 起源于中国 后传入日本 在日本被称为 连珠 是一种老少皆宜的益智游戏 人工智能五子棋系统的目标用户是一切想致力于研究人机对弈算法理论的相关研究者和一切想通过此系统进行五子棋人机对弈游戏的人群
  • SpringBoot依赖管理与自动配置及相关注解

    依赖管理 导入starter场景启动器 1 spring boot starter xxxxx xxxxx 就是指某种场景 引入该starter 这个场景所有常规需要的依赖都自动引入项目 如
  • git使用小手册(一)

    本文章属于git入门篇 针对刚开始接触git的同学 帮助大家了解git并理清使用思路 当然有git使用经验的也不妨一看 说不定会有意外收获呢 本篇假设你已经安装好git 并配置好了username email信息 一 git简介 Git是一
  • 数据结构课设--图书管理系统(含泪版)

    1 要求 设计一个计算机管理系统完成图书管理基本业务 基本要求 1 每种书的登记内容包括书号 书名 著作者 现存量和库存量 2 对书号建立索引表 线性表 以提高查找效率 3 采编入库 新购一种书 确定书号后 登记到图书帐目表中 如果表中已有
  • MATLAB小技巧(22)矩阵分析--逐步回归

    MATLAB小技巧 22 矩阵分析 逐步回归 前言 一 MATLAB仿真 二 仿真结果 三 小结 前言 MATLAB进行图像处理相关的学习是非常友好的 可以从零开始 对基础的图像处理都已经有了封装好的许多可直接调用的函数 这个系列文章的话主
  • 基于python的人员抽签程序

    要求 抽签人数可以指定 人员名单外部导入 抽中的人员自动剔除 bug 当人数 1的时候有bug 人数最大为14 导入库 from tkinter import import random 导入名单 is run False 启停判断 f o
  • ARM 中MMU使用实例

    转自 http www eeworld com cn mcu article 2016080728323 html MMU使用实例 地址映射 本开发板SDRAM的物理地址范围处于0x30000000 0x33FFFFFF S3C2410 S
  • Comparison of a float with a value in C

    Predict the output of following C program include