浮點數精度問題(CSP38思考)

????????CSP38的第一題,考到了浮點數的除法(當然考完發現其實也可以不涉及浮點數,直接轉化為整型),我第一題一直卡到70、80分,故寫下此文。


? ? ? ? 浮點數的運算有精度損失問題,那么應該如何解決和避免呢?

? ? ? ? 一個int類型變量乘以1.0,轉化的是double型(64位系統下,8字節),如果乘以1.0f,那就是float型(4字節)。

	int a=10;cout<<sizeof(a*1.0f)<<endl;cout<<sizeof(a*1.0)<<endl;/*48*/

? ? ? ? 這是常見的在除法中避免精度損失的方法,如下:

int a=2;
int b=5;
cout<<a/b<<" "<<a*1.0/b<<endl;
/*0 0.4*/

? ? ? ? 這樣看似確實解決了精度,但是這只是保證了過程中的精度問題?,如果我們把這個double類型的值賦給其它變量,那就又要看這個賦值變量了。

float 與 double 的區別?

? ? ? ? float為32位,double位64位,但這并不代表和整型一樣,實際用來計算的位數更少,因為有符號位等。就和我們計算Pi后的小數點一樣,小數點后位數越多,精度肯定越高。在一些對精度要求高的地方肯定是用double。但是肯定不能和整數運算相比。

? ? ? ? 商業級的有BigDecimal,目前在算法比賽中,如果涉及到浮點數運算,大多數都是可以進行約分的,把分母約掉,要仔細觀察題目。如果沒有,那就是你沒找到正確的方法。被迫用小數運算,就用double,不要用float!!!

? ? ? ? 最后可以看一下我寫的CSP38第一題,一個80分代碼,一個AC代碼,大家可以看看有什么區別,問題在哪里?

題目:正態分布(normal)--CSP38

????????對于正態分布隨機變量 X ~ N(μ, \sigma ^2)(均值 μ、標準差 σ),查表計算 P (X ≤ n)。具體來說,我們首先需要將 X 轉換為標準正態分布 Z:

Z=\frac{X-\mu}{\sigma}

那么 X ≤ n 的概率也就等于 Z ≤ \frac{n-\mu}{\sigma}的概率:

P (X \leq n) = P (Z \leq\frac{n-\mu}{\sigma})

????????而對于服從標準正態分布的 Z,其小于等于某值的概率 P (Z ≤ m) 可以通過查表得出。圖 1 展示了 m 取值從 0.00 到 1.49 的結果(步長 0.01),其中每列對應 m 的百分位、每行對應 m 的十分位和整數部分。該表可繼續向下延伸,這里只展示部分結果。

?圖 1: 標準正態分布常用值表

????????如圖 2 所示, Z ≤ 1 的概率即為陰影部分的面積,查看表中 1.0 對應行、 0.00 對應列即可得到近似結果 0.8413。

圖 2: 標準正態分布示意圖


????????在本題中你需要模擬上述查表的過程,處理 k 個如下查詢:對于給定的參數 μ、 σ和 n,計算 P (X ≤ n) 的結果在表中的哪一行、哪一列?

????????其中行列下標均從 1 開始:

????????? 行: 0.0 對應第 1 行, 0.1 對應第 2 行,依此類推……

????????? 列: 0.00, 0.01, · · · , 0.09 依次對應第 1、第 2 到第 10 列。

【輸入格式】

從標準輸入讀入數據。

輸入的第一行包含一個正整數 k,表示查詢的個數。

接下來輸入 k 行,每行包含空格分隔的三個整數 μ、 σ 和 n,表示一個查詢。

【輸出格式】

輸出到標準輸出。

每個查詢輸出一行,包含空格分隔的兩個整數 i 和 j,表示查詢的結果位于表中第i 行、第 j 列。

【樣例輸入】

1 ????????4

2 ????????0 1 1

3 ????????2 10 127

4 ????????2 50 227

5 ????????5 100 350

【樣例輸出】

1 ????????11 1

2 ????????126 1

3 ????????46 1

4 ????????35 6

【樣例解釋】

????????第一個查詢等價于計算 P (Z ≤ 1-1 0),如題目描述所示,查看表中 1.0 對應行(第11 行)、 0.00 對應列(第 1 列)即可。

【子任務】

全部的數據滿足:

? k ≤ 20;

? 參數 μ、 σ 和 n 均為整數;

? 0 ≤ μ ≤ n ≤ 1000;

? 1 ≤ σ ≤ 100 且標準差 σ 是 100 的因子。

80分代碼:

#include<bits/stdc++.h>
using namespace std;int main()
{int n;cin>>n;int a=0,b=0,c=0;float s=0;int x=0,y=0;for(int i=0;i<n;i++){cin>>a>>b>>c;s=((c*1.0-a*1.0)*1.0/b*1.0)*10.0;
//		s=((c-a)/b)*10.0;x=(int)s;s=s*1.0-int(s)*1.0;
//		cout<<s<<endl;s*=10.0;y=(int)s;printf("%d %d\n",++x,++y);}return 0;
}

AC代碼:

#include<bits/stdc++.h>using namespace std;int k;int main(){cin >> k;while(k--){int u,sgm,n;cin >> u >> sgm >> n;double ans = 0.00;double ans2=0.00;int ans1 = 0;int ans3 = 0;ans = (double) (n-u)/sgm;ans2 = abs((int)(ans*10)-(ans*10))*10+1;ans = ans*10+1;ans1 = ans;cout << ans1 << " " <<ans2 << endl;}
}

?????????目前我想的就是float與double問題,最后推測一個正確代碼,具體還要等我下次模擬開放提交一下代碼試試了:

#include<bits/stdc++.h>
using namespace std;int main(){int u,Sigma,n;int Z;cin>>u>>Sigma>>n;Z=(u-n)*100/Sigma;/*不會用到小數,直接忽略*/cout<<Z/10<<" "<<Z%10;return 0;
}

參考文獻

浮點類型計算精度不準確原因及如何規避 - wangsong412 - 博客園

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/83158.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/83158.shtml
英文地址,請注明出處:http://en.pswp.cn/web/83158.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

F5 – TCP 連接管理:會話、池級和節點級操作

在 F5 BIG-IP 中,您可以在池成員級別或節點級別管理流向服務器的流量。節點級別狀態會影響與該節點關聯的所有池,而池成員狀態則僅限于單個池。了解每種方法以及何時使用它們對于順利進行維護窗口和流量管理至關重要。 池級狀態:啟用、禁用、強制離線、移除 在 BIG-IP 配置…

StoreView SQL,讓數據分析不受地域限制

作者&#xff1a;章建&#xff08;處知&#xff09; 引言 日志服務 SLS 是云原生觀測和分析平臺&#xff0c;為 Log、Metric、Trace 等數據提供大規模、低成本、實時的平臺化服務。SLS 提供了多地域支持【1】&#xff0c;方便用戶可以根據數據源就近接入 SLS 服務&#xff0c…

爬蟲基礎學習day2

# 爬蟲設計領域 工商&#xff1a;企查查、天眼查短視頻&#xff1a;抖音、快手、西瓜 ---> 飛瓜電商&#xff1a;京東、淘寶、聚美優品、亞馬遜 ---> 分析店鋪經營決策標題、排名航空&#xff1a;抓取所有航空公司價格 ---> 去哪兒自媒體&#xff1a;采集自媒體數據進…

Golang——10、日志處理和正則處理

日志處理和正則處理 1、logx日志處理1.1、logx簡介1.2、日志初始化與配置1.3、常用方法1.4、配合defer捕獲panic 2、正則處理2.1、正則表達式語法大全2.2、基本匹配2.3、常見函數使用2.4、從html提取漢字demo 1、logx日志處理 1.1、logx簡介 logx 是 go-zero 框架中用于日志記…

【LeetCode】3309. 連接二進制表示可形成的最大數值(遞歸|回溯|位運算)

LeetCode 3309. 連接二進制表示可形成的最大數值&#xff08;中等&#xff09; 題目描述解題思路Java代碼 題目描述 題目鏈接&#xff1a;LeetCode 3309. 連接二進制表示可形成的最大數值&#xff08;中等&#xff09; 給你一個長度為 3 的整數數組 nums。 現以某種順序 連接…

C++八股 —— 單例模式

文章目錄 1. 基本概念2. 設計要點3. 實現方式4. 詳解懶漢模式 1. 基本概念 線程安全&#xff08;Thread Safety&#xff09; 線程安全是指在多線程環境下&#xff0c;某個函數、類或代碼片段能夠被多個線程同時調用時&#xff0c;仍能保證數據的一致性和邏輯的正確性&#xf…

軟件工程:如何做好軟件產品

1、什么是產品 從項目到產品 產品&#xff1a;滿足行業共性需求的標準產品。即要能夠做到配置化的開發&#xff0c;用同一款產品最大限度地滿足不同客戶的需求&#xff0c;同時讓產品具有可以快速響應客戶需求變化的能力。 好的產品一定吸收了多個項目的共性&#xff0c;一定是…

Cinnamon修改面板小工具圖標

Cinnamon開始菜單-CSDN博客 設置模塊都是做好的&#xff0c;比GNOME簡單得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…

sqlsugar WhereIF條件的大于等于和等于查出來的坑

一、如下圖所示&#xff0c;當我用 .WhereIF(input.Plancontroltype > 0, u > u.Plancontroltype (DnjqPlancontroltype)input.Plancontroltype) 這里面用等于的時候&#xff0c;返回結果一條數據都沒有。 上圖中生成的SQL如下&#xff1a; SELECT id AS Id ,code AS …

centos 7 部署awstats 網站訪問檢測

一、基礎環境準備&#xff08;兩種安裝方式都要做&#xff09; bash # 安裝必要依賴 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 設置 Apache 開機自啟 systemctl start httpd # 啟動 Apache二、安裝 AWStats&#xff0…

React從基礎入門到高級實戰:React 實戰項目 - 項目四:企業級儀表盤

React 實戰項目&#xff1a;企業級儀表盤 歡迎來到 React 開發教程專欄 的第 29 篇&#xff01;在前 28 篇文章中&#xff0c;我們從 React 的基礎概念逐步深入到高級技巧&#xff0c;涵蓋了組件設計、狀態管理、路由配置、性能優化和實時通信等核心內容。這一次&#xff0c;我…

STM32----IAP遠程升級

一、概述&#xff1a; IAP&#xff0c;全稱是“In-Application Programming”&#xff0c;中文解釋為“在程序中編程”。IAP是一種對通過微控制器的對外接口&#xff08;如USART&#xff0c;IIC&#xff0c;CAN&#xff0c;USB&#xff0c;以太網接口甚至是無線射頻通道&#…

模擬搭建私網訪問外網、外網訪問服務器服務的實踐操作

目錄 實驗環境 實踐要求 一、準備工作 1、準備四臺虛擬機&#xff0c;分別標號 2、 防火墻額外添加兩塊網卡&#xff0c;自定義網絡連接模式 3、 關閉虛擬機的圖形管理工具 4、關閉防火墻 5、分別配置四臺虛擬機的IP地址&#xff0c;此處舉一個例子&#xff08;使用的臨…

刪除遠程已經不存在但本地仍然存在的Git分支

1. 獲取遠程分支列表 首先&#xff0c;確保你獲取了遠程倉庫的最新分支信息&#xff1a; git fetch -p -p 參數會自動清理本地倉庫中那些在遠程已經被刪除的分支的引用。 2. 查看本地分支與遠程分支的對比 運行以下命令來查看哪些本地分支沒有對應的遠程分支&#xff1a; …

GIT(AI回答)

在Git中&#xff0c;git push 命令主要用于將本地分支的提交推送到?遠程倉庫?&#xff08;如GitHub、GitLab等&#xff09;。如果你希望將本地分支的改動同步到另一個?本地分支?&#xff0c;這不是 git push 的設計目的。以下是正確的替代方法&#xff1a; 方法1&#xff1…

深入剖析AI大模型:大模型時代的 Prompt 工程全解析

今天聊的內容&#xff0c;我認為是AI開發里面非常重要的內容。它在AI開發里無處不在&#xff0c;當你對 AI 助手說 "用李白的風格寫一首關于人工智能的詩"&#xff0c;或者讓翻譯模型 "將這段合同翻譯成商務日語" 時&#xff0c;輸入的這句話就是 Prompt。…

React - 組件通信

組件通信 概念&#xff1a;組件通信就是組件之間數據傳遞&#xff0c;根據組件嵌套關系不同&#xff0c;有不同的通信方法 父傳子 —— 基礎實現 實現步驟 父組件傳遞數據 - 在子組件標簽上綁定屬性子組件接收數據 - 子組件通過props參數接收數據 聲明子組件并使用 //聲明子…

RKNN開發環境搭建2-RKNN Model Zoo 環境搭建

目錄 1.簡介2.環境搭建2.1 啟動 docker 環境2.2 安裝依賴工具2.3 下載 RKNN Model Zoo2.4 RKNN模型轉化2.5編譯C++1.簡介 RKNN Model Zoo基于 RKNPU SDK 工具鏈開發, 提供了目前主流算法的部署例程. 例程包含導出RKNN模型, 使用 Python API, CAPI 推理 RKNN 模型的流程. ??本…

計算機視覺頂刊《International Journal of Computer Vision》2025年5月前沿熱點可視化分析

追蹤計算機視覺領域的前沿熱點是把握技術發展方向、推動創新落地的關鍵&#xff0c;分析這些熱點&#xff0c;不僅能洞察技術趨勢&#xff0c;更能為科研選題和工程實踐提供重要參考。本文對計算機視覺頂刊《International Journal of Computer Vision》2025年5月前沿熱點進行了…

互聯網大廠Java求職面試:云原生與微服務架構的深度探討

互聯網大廠Java求職面試&#xff1a;云原生與微服務架構的深度探討 第一輪提問 面試官&#xff1a; “鄭薪苦&#xff0c;假設我們要設計一個大規模電商平臺的微服務架構&#xff0c;你會如何設計其訂單服務&#xff1f;” 鄭薪苦&#xff1a; “首先&#xff0c;我會采用…