通过int 关系运算符来 比较两个 float 变量的大小

2023-11-18

#include <stdio.h>
#include <iostream>
#include <random>

using namespace std;

void compare_unnegative_float();
void show_details();

union float_int_type{
    unsigned    m_unsigned;    
    float       m_float;
    struct{
        unsigned     m_significand  : 23;
        unsigned     m_exponent  :  8;
        bool    m_sign :  1;
    };
};

constexpr int FLOAT_MIN = 0;
constexpr int FLOAT_MAX = 10;
int main(){

    union float_int_type x, y;

    x.m_float = 0.0f;
    printf("%x, %f, %u, %u, %u\n",x.m_unsigned, x.m_float, x.m_significand, x.m_exponent, x.m_sign);
    cout  << x.m_float <<":   exponent="<<x.m_exponent<<"        significand="<<x.m_significand<<endl;

    std::random_device rd;
    std::default_random_engine eng(rd());
    std::uniform_real_distribution<float> distr(FLOAT_MIN, FLOAT_MAX);

    compare_unnegative_float();

    //show_details();

    return 0;
}


void compare_non_negative_float(){

    union float_int_type x, y;

    x.m_float = 0.0f;
    printf("%x, %f, %u, %u, %u\n",x.m_unsigned, x.m_float, x.m_significand, x.m_exponent, x.m_sign);
    cout  << x.m_float <<":   exponent="<<x.m_exponent<<"        significand="<<x.m_significand<<endl;

    std::random_device rd;
    std::default_random_engine eng(rd());
    std::uniform_real_distribution<float> distr(FLOAT_MIN, FLOAT_MAX);

    for(unsigned i=0; i<-1; i++){
        if(i%10000000==0) cout<<i<<endl;

        x.m_float = distr(eng);
        y.m_float = distr(eng);
        if(x.m_exponent>y.m_exponent || (x.m_exponent==y.m_exponent && x.m_significand>y.m_significand))
        {
            if(!(x.m_float> y.m_float)) cout<<"Error: "<<x.m_float<<" > "<<y.m_float<<" is false!"<<endl;
        }else if(x.m_exponent < y.m_exponent || (x.m_exponent == y.m_exponent && x.m_significand<y.m_significand))
        {
            if(!(x.m_float < y.m_float)) cout<<"Error: "<<x.m_float<<" < "<<y.m_float<<" is false!"<<endl;
        }else
        {
            if(!(x.m_float == y.m_float)) cout<<"Error: "<<x.m_float<<" == "<<y.m_float<<" is false!"<<endl;
        }
    }
}



void show_details(){

    union float_int_type x;
    x.m_float = 1.0f;
    printf("%x, %f, %u, %u, %u\n",x.m_unsigned, x.m_float, x.m_significand, x.m_exponent, x.m_sign);
    cout  << x.m_float <<":   exponent="<<x.m_exponent<<"        significand="<<x.m_significand<<endl;

    std::random_device rd;
    std::default_random_engine eng(rd());
    std::uniform_real_distribution<float> distr(FLOAT_MIN, FLOAT_MAX);

    for(int i=0; i<100; i++){
        if(i%10==0) cout<<endl;
        x.m_float = distr(eng);
        cout  << x.m_float <<":   exponent="<<x.m_exponent<<"        significand="<<x.m_significand<<endl;
    }
    cout <<endl;
}

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

通过int 关系运算符来 比较两个 float 变量的大小 的相关文章

  • 如何获取正在访问 ASP.NET 应用程序的当前用户?

    为了获取系统中当前登录的用户 我使用以下代码 string opl System Security Principal WindowsIdentity GetCurrent Name ToString 我正在开发一个 ASP NET 应用程
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 重载<<的返回值

    include
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • Linux之prink原理

    我的分析是基于Linux4 15 1 1 看看kernel是如何调用到console初始化函数的 分两条线 a start kernel gt console init gt call con initcall start 去调用放在 co
  • Java 集合、HashMap 底层实现原理

    一 Java 集合概述 Java 集合可分为 Collection 和 Map 两种体系 Collection接口 单列数据 定义了存取一组对象的方法的集合 List 元素有序 指的是存储时 与存放顺序保持一致 可重复的集合 Set 元素无
  • Mybatis---增删改查

    目录 一 添加用户 1 持久层接口方法 2 映射文件 3 测试方法 二 修改用户 1 持久层接口方法 2 映射文件 3 测试方法 三 删除用户 1 持久层接口方法 2 映射文件 3 测试方法 四 查询用户 1 持久层接口方法 2 映射文件
  • Redis查询当前库有多少个 key

    info可以看到所有库的key数量 dbsize则是当前库key的数量 keys 这种数据量小还可以 大的时候可以直接搞死生产环境 dbsize和keys 统计的key数可能是不一样的 如果没记错的话 keys 统计的是当前db有效的key
  • C++面试题之继承

    目录 设计一个类型 不能在外部环境中创建该类的对象 设计一个不能被继承的类 设计一个不能被继承的类 但可以在外部环境创建该类型的对象 设计一个能被继承的类 但不能在外部环境创建该类型的对象 限制派生类对象不可以拷贝和赋值如何实现 设计一个类
  • Git(五):历史提交与远程仓库修改

    目录 4 查看提交历史 4 1 查看日志详细信息 4 2 查看某次提交信息 4 3 查看更改 5 撤销操作 5 1 取消暂存的文件 5 2 撤销对文件的修改 5 3 撤销远程记录 6 远程仓库的使用 6 1 查看远程仓库 6 2 添加远程仓
  • Python自动化部署环境

    import paramiko import sys 创建SSHClient实例对象 ssh paramiko SSHClient 调用方法 表示没有存储远程机器的公钥 允许访问 ssh set missing host key polic
  • 全球及中国冷链物流产业需求前景与投资竞争力研究报告2022版

    全球及中国冷链物流产业需求前景与投资竞争力研究报告2022版 HS HS HS HS HS HS HS HS HS HS HS HS 修订日期 2021年11月 搜索鸿晟信合研究院查看官网更多内容 第一章 冷链物流相关概述 1 1 冷链物流
  • socket传输图片之TCP协议

    在学习socket传输图片之前 我们应该先具备一些基础知识 opencv图片编码和解码 cv2 imencode cv2 imdecode 这两个函数是本教程再传输图片会用到的 个人粗浅的理解是放在内存的中的图片是以图像数据的形式存放的 而
  • 解决gomock报错:doesn‘t match the argument at index 1.

    这个问题在stack Overflow上面有一些解答 但是由于这个报错比较泛 导致仅仅看这个报错信息很难去定位写单测的时候哪里错了 我们需要使用go test v run 函数名 或者直接在vscode上面点击run 我当时发现了有下面的报
  • 逗号分隔String字符串 - 数组 - 集合,相互转换

    1 准备一个逗号分割字符串 String str 小张 小王 小李 小赵 2 逗号分割字符串转换为集合 转换为集合之前会先转换为数组 第一种 先用split将字符串按逗号分割为数组 再用Arrays asList将数组转换为集合 List
  • 暴力破解漏洞

    漏洞概述 暴力破解攻击 又叫字典攻击 是指攻击者系统地组合了所有可能性尝试破解用户的账户名 密码等敏感信息 通常使用自动化脚本或者工具进行暴力破解工具 漏洞产生的主要原因是 1 没有强制用户设置复杂密码 比如密码由数字 字母 特殊字符构成
  • 创建一个maven项目

    先图片的步骤来 2 3 4 5 6 8 9
  • webpack配置指定输出目录和名称记录一下

    const path require path const MiniCssExtractPlugin require mini css extract plugin 表示自定义的系统配置 module exports css 是否使用css
  • 【100%通过率 】【华为OD机试c++/python】实力差距最小总和【2023 Q1

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 游戏里面 队伍通过匹配实力相近的对手进行对战 但是如果匹配的队伍实力相差太大 对于双方游戏体验都不会太好 给定n个队伍的实力值 对其进行两两实力
  • ini文件(QSettings)保存QNetworkCookie(或自定义结构体)——Qt

    前言 之前我用过QSettings写过ini文件作为配置文件 也用过QVariant变量 无论是官方支持的还是自定义的 但是在ini文件中 将QVariant的值作为Value进行保存 是没遇到过 也没做过 这次公司项目中涉及到将Cooki
  • Springboot读取配置文件、pom文件及自定义配置文件

    前言 很多人都知道读取配置文件 这是初级做法 上升一点难度是使用java bean的方式读取自定义配置文件 但是大家很少有知道读取pom文件信息 接下来我都会讲到 正文 笔者还是基于Spring Boot v1 5 8 RELEASE 利用
  • discuz首页出现重定向过多,discuz首页域名和默认域名一致的情况下无法保存

    问题 discuz首页域名和默认域名一致的情况下无法保存 如不填首页域名出现重定向过多问题 解决思路 使用FTP打开 source admincp admincp domain php将下面一段注释起来即可 约在63 65行 if empt
  • Advanced REST client的使用说明以及安装

    1 为什么要使用REST Client 在实际企业开发过程中经常会有这样的需求 1 我当前开发的这个系统是需要调用其他系统的接口 也就是我们需要频繁的测试接口 尝试不同的入参参数去查看返回结果 如果要在程序中调试就必要不断的改代码 重启to
  • 通过int 关系运算符来 比较两个 float 变量的大小

    include