最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決Python中的modf()函數(shù)取小數(shù)部分不準確問題

 更新時間:2021年05月28日 08:47:04   作者:可樂味的鼻涕  
這篇文章主要介紹了解決Python中的modf()函數(shù)取小數(shù)部分不準確問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

使用math.modf()對一個浮點數(shù)進行拆分時經(jīng)常會遇到如下情況

如下

import math
print(math.modf(2.4)) # 輸出 (0.3999999999999999, 2.0)

我們會發(fā)現(xiàn)對2.4進行拆分得到的小數(shù)并不是0.4,這是因為什么呢?

這是因為計算機采用的是二進制代碼,而二進制代碼由于計算上的誤差無法準確表示某些十進制數(shù)的小數(shù)部分。

下面我們具體來講一下。

我們知道一個十進制數(shù)轉(zhuǎn)化為二進制數(shù)需要分為兩部分進行計算:整數(shù)部分和小數(shù)部分。

整數(shù)部分采用“除二取余法”。將這個整數(shù)除以2,得到它的余數(shù),然后將商再除以3,直到商為0為止,并將各個得到的余數(shù)按照相反的順序進行排列。

小數(shù)部分采用“乘2取整法”,將這個小數(shù)乘2,將新得到的數(shù)的整數(shù)部分取出,再用2乘余下的小數(shù)部分,如此往復(fù)直到乘積中的小數(shù)部分為0或者達到要求的精度為止。并將取出的整數(shù)部分按照取出的先后順序從前到后排列。

 123/2=61...1
 61/2=30...1
 30/2=15...0
 15/2=7...1
 7/2=3...1
 3/2=1...1
 1/2=0...1
 (123)10=(1111011)2
0.4*2=0.8...0
0.8*2=1.6...1
0.6*2=1.2...1
0.2*2=0.4...0
0.4*2=0.8...0
0.8*2=1.6...1
0.6*2=1.2...1
(0.4)10=(0.011001100110011001100110...)2
(123.4)2=(1111011.011001100110011...)2

十進制的0.4轉(zhuǎn)化為二進制時會出現(xiàn)重復(fù)循環(huán)“0110”的情況,但是目前計算機存儲浮點數(shù)是按照電器和電子工程師協(xié)會的標準(IEEE754浮點數(shù)存儲格式標準)來進行存儲的。

IEEE規(guī)定單精度浮點最多存儲32位(4個字節(jié)):

31位是符號位。1表示該數(shù)為負,0為正

30~23是指數(shù)位(-128-127)

22~0是尾數(shù)位,尾數(shù)的編碼一般是源碼和補碼

IEEE標準從邏輯上用三元組{S,E,M}表示一個數(shù),如圖所示:

在這里插入圖片描述

也就是說上面將0.4轉(zhuǎn)換出的二進制代碼,我們只能存儲23位,即使數(shù)據(jù)類型為double,也只能存儲52位,這樣大家便能看出問題出現(xiàn)的原因了。23位的數(shù)據(jù)顯然無法完整表示0.4的二進制數(shù)據(jù),于是誤差產(chǎn)生了。

那所有的十進制小數(shù)都無法完整表示嗎?不是的,只要小數(shù)部分乘上2最終小數(shù)部分能夠得到0就不會出現(xiàn)這種問題,比如0.5,0.75。

import math
print(math.modf(1.5))  # 輸出 (0.5,1.0)
0.5*2=1...1
(0.5)10=(0.1)2
0.75*2=1.5...1
0.5*2=1...1
(0.75)10=(0.11)2

補充:Python中“取整”的各種問題

一、初衷:

有時候我們分頁展示數(shù)據(jù)的時候,需要計算頁數(shù)。一般都是向上取整,例如counts=205 pageCouts=20 ,pages= 11 頁。

一般的除法只是取整數(shù)部分,達不到要求。

二、方法:

1、通用除法:

UP(A/B) = int((A+B-1)/B)

取臨界值,計算下A+B-1的范圍就OK.

2 、Python除法:

首先要說的是python中的除法運算,

當使用x/y形式進行除法運算時,那么會進行所謂的true除法,比如2.0/3的結(jié)果是 0.66666666666666663。

另外一種除法是采用x//y的形式(向下取整),那么這里采用的是所謂floor除法,即得到不大于結(jié)果的最大整數(shù)值,這個運算時與操作數(shù)無關(guān)的。比如2//3的結(jié)果是0,-2//3的結(jié)果是-1,-2.0//3的結(jié)果是-1.0。

在python 3.0中,x/y將只執(zhí)行true除法,而與操作數(shù)無關(guān);x//y則執(zhí)行floor除法。

Python運算向上取整方法:(A+B-1)/B

3、Python match.ceil函數(shù) np.ceil函數(shù)

ceil(x)函數(shù)是向上取整,即取大于等于x的最接近整數(shù)。

import math 
math.ceil(float(205)/20) 
import numpy as np
np.ceil(float(205)/20)

Python 向上取整的算法

1、一般使用floor除法 (np.floor()或者math.floor())

import numpy as np 
n = np.array([-1.7, -2.5, -0.2, 0.6, 1.2, 2.7, 11]) 
floor = np.floor(n)
print(floor)  # [ -2.  -3.  -1.   0.   1.   2.  11.]

2、一般除法/

A=100
B=16
c=100//16
(c=6)

3、round()四舍五入函數(shù)。

np.around 返回四舍五入后的值,可指定精度。

around(a, decimals=0, out=None)

a 輸入數(shù)組

decimals 要舍入的小數(shù)位數(shù)。 默認值為0。 如果為負,整數(shù)將四舍五入到小數(shù)點左側(cè)的位置

import numpy as np 
n = np.array([-0.746, 4.6, 9.4, 7.447, 10.455, 11.555])
 
around1 = np.around(n)
print(around1)  # [ -1.   5.   9.   7.  10.  12.]
 
around2 = np.around(n, decimals=1)
print(around2)  # [ -0.7   4.6   9.4   7.4  10.5  11.6]
 
around3 = np.around(n, decimals=-1)
print(around3)  # [ -0.   0.  10.  10.  10.  10.]

Python 分別取整的算法

math模塊中的 modf()方法

將整數(shù)部分和小數(shù)部分分別取出,可以使用math模塊中的 modf()方法

例如:

>>> math.modf(4.25)
(0.25, 4.0)
>>> math.modf(4.33)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 復(fù)習(xí)Python中的字符串知識點

    復(fù)習(xí)Python中的字符串知識點

    這篇文章主要介紹了Python中字符串的一些知識點,來自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • 利用Python腳本實現(xiàn)ping百度和google的方法

    利用Python腳本實現(xiàn)ping百度和google的方法

    最近在做SEO的時候,為了讓發(fā)的外鏈能夠快速的收錄,想到了利用ping的功能,google和百度都有相關(guān)的ping介紹,有興趣的朋友可以去看看相關(guān)的知識。下面這篇文章主要介紹了利用Python腳本實現(xiàn)ping百度和google的方法,需要的朋友可以參考借鑒,一起來看看吧。
    2017-01-01
  • Python字符串函數(shù)strip()原理及用法詳解

    Python字符串函數(shù)strip()原理及用法詳解

    這篇文章主要介紹了Python字符串函數(shù)strip()原理及用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • 以tensorflow庫為例講解Pycharm中如何更新第三方庫

    以tensorflow庫為例講解Pycharm中如何更新第三方庫

    這篇文章主要介紹了以tensorflow庫為例講解Pycharm中如何更新第三方庫,文章介紹有詳細流程,需要的小伙伴可以參考一下,希望對你的學(xué)習(xí)工作有所幫助
    2022-03-03
  • NumPy實現(xiàn)結(jié)構(gòu)化數(shù)組的示例代碼

    NumPy實現(xiàn)結(jié)構(gòu)化數(shù)組的示例代碼

    結(jié)構(gòu)化數(shù)組是 NumPy 中用于處理異質(zhì)數(shù)據(jù)的重要工具,通過定義復(fù)雜的數(shù)據(jù)類型,我們可以創(chuàng)建具有不同字段的數(shù)組,本文主要介紹了NumPy實現(xiàn)結(jié)構(gòu)化數(shù)組的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Django中ajax發(fā)送post請求 報403錯誤CSRF驗證失敗解決方案

    Django中ajax發(fā)送post請求 報403錯誤CSRF驗證失敗解決方案

    這篇文章主要介紹了Django中ajax發(fā)送post請求 報403錯誤CSRF驗證失敗解決方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • Python編程實現(xiàn)二叉樹及七種遍歷方法詳解

    Python編程實現(xiàn)二叉樹及七種遍歷方法詳解

    這篇文章主要介紹了Python編程實現(xiàn)二叉樹及七種遍歷方法,結(jié)合實例形式詳細分析了Python二叉樹的定義及常用遍歷操作技巧,需要的朋友可以參考下
    2017-06-06
  • pandas采樣的實現(xiàn)方法

    pandas采樣的實現(xiàn)方法

    pandas提供了多種方法進行隨機采樣,包括指定數(shù)量、按比例、設(shè)置隨機種子、有無放回抽樣及按列和分層抽樣,下面就來介紹一下,感興趣的可以了解一下
    2024-12-12
  • python優(yōu)化測試穩(wěn)定性的失敗重試工具pytest-rerunfailures詳解

    python優(yōu)化測試穩(wěn)定性的失敗重試工具pytest-rerunfailures詳解

    筆者在執(zhí)行自動化測試用例時,會發(fā)現(xiàn)有時候用例失敗并非代碼問題,而是由于服務(wù)正在發(fā)版,導(dǎo)致請求失敗,從而降低了自動化用例的穩(wěn)定性,那該如何增加失敗重試機制呢?帶著問題我們一起探索
    2023-10-10
  • Python過濾列表用法實例分析

    Python過濾列表用法實例分析

    這篇文章主要介紹了Python過濾列表用法,結(jié)合實例形式分析了過濾列表的具體定義,功能與使用技巧,需要的朋友可以參考下
    2016-04-04

最新評論

景宁| 六盘水市| 浏阳市| 安平县| 东丰县| 海宁市| 诸暨市| 阳原县| 莎车县| 义乌市| 清徐县| 永寿县| 五峰| 德阳市| 沾化县| 信丰县| 法库县| 青铜峡市| 仁化县| 安阳市| 吴桥县| 汉源县| 苍南县| 盐边县| 丰县| 修文县| 双城市| 汉寿县| 秦皇岛市| 黄大仙区| 巩留县| 大足县| 荃湾区| 宁德市| 新平| 会昌县| 府谷县| 东港市| 宣城市| 芦山县| 汉阴县|