首页 > 编程语言 >C++ 浮点数比较代码

C++ 浮点数比较代码

时间:2023-02-16 14:02:07浏览次数:42  
标签:std double 浮点数 C++ include 代码

#include <algorithm>
#include <cmath>
#include <iostream>

// 如果 a 和 b 之间的差异在 a 和 b 中较大者的 epsilon 百分比以内,则返回 true
bool approximatelyEqualRel(double a, double b, double relEpsilon)
{
	return (std::abs(a - b) <= (std::max(std::abs(a), std::abs(b)) * relEpsilon));
}

bool approximatelyEqualAbsRel(double a, double b, double absEpsilon, double relEpsilon)
{
    // 检查数字是否真的很接近——比较接近零的数字时需要。
    double diff{ std::abs(a - b) };
    if (diff <= absEpsilon)
        return true;

    // 否则退回到 Knuth 的算法
    return (diff <= (std::max(std::abs(a), std::abs(b)) * relEpsilon));
}

int main()
{
    // a 非常接近 1.0,但有舍入误差
    double a{ 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 };

    std::cout << approximatelyEqualRel(a, 1.0, 1e-8) << '\n';     // 将“几乎 1.0”与 1.0 进行比较
    std::cout << approximatelyEqualRel(a-1.0, 0.0, 1e-8) << '\n'; // 将“几乎 0.0”与 0.0 进行比较

    std::cout << approximatelyEqualAbsRel(a, 1.0, 1e-12, 1e-8) << '\n'; // 将“几乎 1.0”与 1.0 进行比较
    std::cout << approximatelyEqualAbsRel(a-1.0, 0.0, 1e-12, 1e-8) << '\n'; // 将“几乎 0.0”与 0.0 进行比较

标签:std,double,浮点数,C++,include,代码
From: https://www.cnblogs.com/leafz/p/17126413.html

相关文章

  • 编译和运行一个C++程序
    由C++编写的源代码需要经过编译和链接后,将其转化为可执行程序后才能运行.在C语言中,使用gcc命令来编译和链接C程序gccmain.c//编译单个源文件gccmain.cmodule.......
  • C++引用
    引用reference举例如:intref=&a;只是产生了一个a的别名,ref并不一个真正的变量。可以用在形参上,代替指针,使得代码更加简洁。voidadd(int*value),等效于void......
  • 阿里一面:你做过哪些代码优化?来一个人人可以用的极品案例
    前言在尼恩读者50+交流群中,尼恩经常指导小伙伴改简历。改简历所涉及的一个要点是:在XXX项目中,完成了XXX模块的代码优化另外,在面试的过程中,面试官也常常喜欢针对提......
  • 代码随想录算法训练营day22 | leetcode 235. 二叉搜索树的最近公共祖先 ● 701.二叉
    LeetCode235.二叉搜索树的最近公共祖先分析1.0 二叉搜索树根节点元素值大小介于子树之间,所以只要找到第一个介于他俩之间的节点就行classSolution{publicTre......
  • 不用Blazor WebAssembly,开发在浏览器端编译和运行C#代码的网站
    不用BlazorWebAssembly,开发在浏览器端编译和运行C#代码的网站 本文中,我将会为大家分享一个如何用.NET技术开发“在浏览器端编译和运行C#代码的工具”,核心的技术就是......
  • 一封传话一行代码实现微信消息推送
    一行代码实现微信消息推送介绍通过调用一个简单的接口,将要推送的消息提交后,您将在微信收到推送的消息,简单快捷可以应用的场景设备上下线,量化交易,网站公告,服务器异常信息......
  • gitee分支代码推送
    gitee分支代码推送 把本地的代码二次提交到gitee,并创建分支操作:cdYourLocalRepoPath##cd到本地仓库路径下gitinit##仓库初始化gitcheckout-b分支名字##创建......
  • C++中的结构体内嵌比较函数
    概述结构体内嵌比较函数有两种比较常见的应用场合:sort()和优先队列priority_queue<>其中,sort默认从小到大排序,优先队列从大到小排序,要改变默认的次序,必须上比较函数壹个栗......
  • C/C++图书销售管理系统[2023-02-16]
    C/C++图书销售管理系统[2023-02-16]题目20图书销售管理系统[说明及要求]实现图书信息(书号、书名、作者、定价、数量)的新增、修改、删除和查询功能;实现销售信息(书号......
  • 代码随想录算法Day15 | 102.二叉树层序遍历,226.翻转二叉树,101.对称二叉树
    102.二叉树层序遍历题目链接:102.二叉树的层序遍历-力扣(LeetCode)题目给你二叉树的根节点root,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。  ......