Peter算法小课堂—浮点数危机

news2025/1/18 11:10:17

大家先想想下面这个代码运行结果:

#include <bits/stdc++.h>
using namespace std;
int main(){
	double x=5.2;
	double y=4.1+1.1;
	cout<<(x<y)<<endl;
	cout<<x-y<<endl;
	return 0;
}

最终发现,

???但凡一个学过数学的人都知道4.1+1.1=5.2,难道……计算机CPU爆掉了?

其实,计算机在用二进制储存浮点数时会有误差,比如我们要凑0.2,计算机会先凑0.125,再凑0.0625,再再……,最终还是有那么一丢丢的误差。那么,我们就不能比较大小了吗?

再看一个代码:

#include <bits/stdc++.h>
using namespace std;
const double ERR=0.00000001;
int main(){
	double x=5.2;
	double y=4.1+1.1;
	cout<<(fabs(x-y)<ERR)<<endl;//判断浮点数"=="
	cout<<(x>y+ERR)<<endl;//判断浮点数">"
	cout<<(x<y-ERR)<<endl;//判断浮点数"<"
	cout<<(x>y-ERR)<<endl;//判断浮点数">="
	return 0;
}

结果……

不出所料,这一次竟然答对了!Emm……怎么理解呢

相信前3个大家一定理解,前面讲过是精度捣的乱。那最后一个呢?

我们用数轴来解释,

数轴: y-ERR           y               y+ERR

那么,我们但凡x在[y-ERR,y+ERR]里面,都算x=y,因为误差嘛。那x>=y就相当于x>y||x==y,即y-ERR<x

让我们大展身手八

计算\sqrt{a},保留两位小数

那么,一般人都用sqrt,我们呢……我们是高(蒟)手(蒻),必须用二分

分析:二分,枚举答案,很简单

代码:

#include <bits/stdc++.h>
#define ERR 0.000001
using namespace std;
typedef double d;
d a;
bool tooSmall(d x){return x*x<=a;}
int main(){
	cin>>a;
	d l=0;
	d r=1000;
	d ans=1;
	while(r-l>ERR){
		d mid=l+(r-l)/2;
		if(tooSmall(mid)) ans=l=mid;
		else r=mid;
	}
	cout<<fixed<<setprecision(2)<<ans<<endl;
	return 0;
}

 太戈编程427题

题目描述:

对于一元三次方程: x^3+x^2+x=a, 它的形式很特殊,我们可以证明它的解只有一个。

分析:和前一题差不多

代码:

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
const double ERR=0.000001;
double a;
bool tooSmall(double x){
	return pow(x,3)+pow(x,2)+x<a;
}
int main(){
	cin>>a;
	double l=-100,r=100;
	while(r-l>ERR){
		double mid=l+(r-l)/2;
		if(tooSmall(mid)) l=mid;
		else r=mid;
	}
	cout<<fixed<<setprecision(3)<<r<<endl;
	return 0;
}

当然,我有个朋友,他是个蒟蒻,他只学到for循环,也做了这道题,AC了,给大家看看代码,嘲笑一下

#include <bits/stdc++.h>
using namespace std;
int main(){
	double a,ans,Min=1000;
	cin>>a;
	for(double x=-10;x<=10;x+=0.001){
		double d=fabs(x*x*x+x*x+x-a);
		if(d<Min) Min=d,ans=x;
	}
	cout<<fixed<<setprecision(3)<<ans<<endl;
	return 0;
}

这也可以,好吧……

送礼就要体面

这道题洛谷里没有,我截图

请大家简要概括本题,语文?

其实这题就是相当于0/1分数规划

来推导吧!

这题还是用二分

二分

是否存在礼品集合S,含k个礼品,使得:k个礼品的性价比大于等于x

相当于\frac{\sum_{i\epsilon S}^{} vi}{\sum_{i\epsilon S}^{} pi}\geq x,奇妙的数学

下面进行推导

\frac{\sum_{i\epsilon S}^{} vi}{\sum_{i\epsilon S}^{} pi}\geq x

\sum_{i\epsilon S}^{} vi \geq x\sum_{i\epsilon S}^{} pi

\sum_{i\epsilon S}^{} vi-x\sum_{i\epsilon S}^{} pi\geq 0

\sum_{i\epsilon S}^{} \left ( v_{i} -xp_{i}\right )\geq 0

#include <bits/stdc++.h>
using namespace std;
const int N=100000;
const int ERR=0.000001;
int n,k,p[N],v[N],z[N];
bool OK(double x){
	for(int i=0;i<n;i++) z[i]=v[i]-x*p[i];
	sort(z,z+n);
	double sum=0;
	for(int i=n-k;i<n;i++) sum+=z[i];
	return sum>=0;
}
int main(){
	cin>>n>>k;
	for(int i=0;i<n;i++) cin>>v[i]>>p[i];
	double maxv=*max_element(v,v+n);
	double minp=*min_element(p,p+n);
	double l=0,r=maxv/minp,ans=0;
	while(r-l>ERR){
		double mid=l+(r-l)/2;
		if(OK(mid)) ans=l=mid;
		else r=mid;
	}
	cout<<ans<<endl;
	return 0;
}

希望这些对大家有用,三连必回

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1345163.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HDMI2.1输入转4Port MIPI/LVDS输出,嵌入式SPI闪存固件存储,VR和AR应用首选国产芯片方案-LT6911GXC

描述 LT6911GXC是一款高性能的HDMI2.1到MIPI或LVDS芯片&#xff0c;用于VR/显示应用。 HDCP RX作为HDCP中继器的上游&#xff0c;可配合其他芯片的HDCPTX实现中继器功能。 对于HDMI2.1输入&#xff0c;LT6911GXC可以配置为3/4通道。自适应均衡使其适合于长电缆应用&#xff0c;…

Python集成开发工具

第二章、IDE&#xff08;PyCharm&#xff09; 一、设置py文件模板 设置模版 二、格式化代码设置 三、PyCharm运行python源文件的模式 第一次按照何种模式执行测试用例&#xff0c;后续都会按照这种方式去执行 普通模式&#xff0c;unittest模式&#xff0c;pytest模式介绍 四…

C# Onnx yolov8n forklift detection

目录 效果 模型 项目 代码 下载 C# Onnx yolov8n forklift detection 效果 模型 Model Properties ------------------------- date&#xff1a;2023-12-25T16:22:05.530078 author&#xff1a;Ultralytics task&#xff1a;detect license&#xff1a;AGPL-3.0 https:/…

OCP NVME SSD规范解读-4.NVMe IO命令-1

针对NVMe-IO-1到NVMe-IO-14的解读如下&#xff1a; NVMe-IO-1&#xff1a; 设备应支持所有必需的NVMe I/O命令。这是设备能够进行基本数据读写操作的基础要求。NVMe I/O命令包括读、写、删除、擦除等操作&#xff0c;这些是存储设备的核心功能。 NVMe-IO-2&#xff1a; 设备应…

11、分布式事务高频面试题

1、什么是分布式事务 在分布式系统中&#xff0c;一个业务因为跨越不同数据库或者跨越不同微服务而包含多个子事务&#xff0c;要求所有子事务同时成功或失败&#xff0c;这就是分布式事务。 比如一个电商系统的下单操作需要请求三个服务来完成&#xff0c;这三个服务分别是&…

【前端技术】LocalForage数据存储

✨专栏介绍 在当今数字化时代&#xff0c;Web应用程序已经成为了人们生活和工作中不可或缺的一部分。而要构建出令人印象深刻且功能强大的Web应用程序&#xff0c;就需要掌握一系列前端技术。前端技术涵盖了HTML、CSS和JavaScript等核心技术&#xff0c;以及各种框架、库和工具…

2022年全球运维大会(GOPS深圳站)-核心PPT资料下载

一、峰会简介 GOPS 主要面向运维行业的中高端技术人员&#xff0c;包括运维、开发、测试、架构师等群体。目的在于帮助IT技术从业者系统学习了解相关知识体系&#xff0c;让创新技术推动社会进步。您将会看到国内外知名企业的相关技术案例&#xff0c;也能与国内顶尖的技术专家…

Asp .Net Core 集成 FluentValidation 强类型验证规则库

文章目录 入门程序安装案例&#xff1a;登录 验证器内置验证器自定义验证器编写自定义验证器可重复使用的属性验证器 本地化DI自动验证 官网&#xff1a;https://docs.fluentvalidation.net/en/latest/index.html 入门程序 安装 使用 Visual Studio 中的 NuGet 包管理器控制台…

maven在pdf转image上的陷阱

在pdf转image上&#xff0c;需要两个插件&#xff1a; <dependency><groupId>org.apache.pdfbox</groupId><artifactId>fontbox</artifactId><version>2.0.4</version></dependency><dependency><groupId>org.xht…

(2023,提示分布学习,重参数化,正交损失)DreamDistribution:文本到图像扩散模型的提示分布学习

DreamDistribution: Prompt Distribution Learning for Text-to-Image Diffusion Models 公众&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 1. 方法 1.1 文本到图像扩散 1.2 提示…

utf8mb4_0900_ai_ci、utf8mb4_0900_as_ci、utf8mb4_0900_as_cs 这三者有什么区别

utf8mb4_0900_ai_ci, utf8mb4_0900_as_ci, 和 utf8mb4_0900_as_cs 是 MySQL 数据库中使用的字符集和校对规则。这些校对规则决定了如何比较和排序字符数据。它们属于 utf8mb4 字符集&#xff0c;这是 UTF-8 编码的超集&#xff0c;支持最多 4 个字节的字符&#xff0c;能够存储…

前端 js 基础(2)

js For In for in 循环遍历 person 对象每次迭代返回一个键 (x)键用于访问键的值键的值为 person[x] 如果索引顺序很重要&#xff0c;请不要在数组上使用 for in。 索引顺序依赖于实现&#xff0c;可能不会按照您期望的顺序访问数组值。 当顺序很重要时&#xff0c;最好使用 f…

红队打靶练习:MISDIRECTION: 1

信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:69:c7:bf, IPv4: 192.168.12.128 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.12.1 00:50:56:c0:00:08 …

解锁加密生态:用户钱包画像分析

作者&#xff1a;stellafootprint.network 随着加密资产的爆发式增长&#xff0c;对链上交易动态的分析变得至关重要。像 Footprint Analytics 这样的平台让投资者、开发者和企业可以通过用户钱包画像分析&#xff08;Wallet Profile)&#xff0c;去解锁加密生态。 用户钱包画…

Spring-4-代理

前面提到过&#xff0c;在Spring中有两种类型的代理&#xff1a;使用JDK Proxy类创建的JDK代理以及使用CGLIB Enhancer类创建的基于CGLIB的代理。 你可能想知道这两种代理之间有什么区别&#xff0c;以及为什么 Spring需要两种代理类型。 在本节中&#xff0c;将详细研究代理…

ssm基于web的马病管理系统设计与实现+jsp论文

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;马病信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行处理不能满足广大…

mxxWechatBot微信机器人V2版本文档说明

大家伙&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 先看这里 一、前言二、mxxWechatBot流程图三、怎么使用&#xff1f; 一、前言 经过不断地探索与研究&#xff0c;mxxWechatBot正式上线&#xff0c;届时全面开放使用。 mxxWechatBot&am…

递归详解之青蛙跳台阶和汉诺塔问题

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

阻止指定IP地址进行网站访问的简单方式

​  许多网站管理员&#xff0c;应该都会将恶意持续访问的IP请求视为比较头疼的一个问题。要解决这个不正常的访问请求&#xff0c;增强网站安全性&#xff0c;有些简单方式可用。在下面的文章中&#xff0c;介绍了使用.htaccess来禁止某些IP地址的简单方式。 首先&#xff0…

C#的checked关键字判断是否溢出

目录 一、定义 二、示例&#xff1a; 三、生成&#xff1a; 一、定义 使用checked关键字处理溢出。 在进行数学运算时&#xff0c;由于变量类型不同&#xff0c;数值的值域也有所不同。如果变量中的数值超出了变量的值域&#xff0c;则会出现溢出情况&#xff0c;出现溢出…