浮點運算為什麼耗時很多?

2021-02-20 電子菌



浮點運算就是實數運算,因為計算機只能存儲整數,所以實數都是約數,這樣浮點運算是很慢的而且會有誤差。

大多數機器都是32位的,也就是說32位都用來表示整數的話,那麼對於無符號整數就是0 到 2^32-1,對於有符號的話就是-2^31 到 2^31-1。

 

浮點數的表示

 

m 是尾數,為±d.dddddd  其中第一位必須非0

b 是基數, 

下面,讓我們回到一開始的問題:為什麼0x00000009還原成浮點數,就成了0.000000?

首先,將0x00000009拆分,得到第一位符號位s=0,後面8位的指數E=00000000,最後23位的有效數字M=000 0000 0000 0000 0000 1001。

由於指數E全為0,所以符合上一節的第二種情況。因此,浮點數V就寫成:

V=(-1)^0×0.00000000000000000001001×2^(-126)=1.001×2^(-146)

·       整數和(和AND/ OR/ XOR)與乘積花費的時間相同,除法(和取模)的速度慢三倍。

·       浮點數的乘積比求和的乘積慢兩倍,除法的乘積甚至更慢。

·       在相同數據大小下,浮點運算始終比整數運算慢。

·       越小越快。

·       64位整數精度確實很慢。

·       浮點數32位總和比64位快,但在乘積和除法上卻不是。

·       80和128位精度僅在絕對必要時才應使用,它們非常慢。

 

相關焦點

  • ARM 浮點運算詳解
    一:早期ARM上的浮點模擬器:早期的ARM沒有協處理器,所以浮點運算是由CPU來模擬的,即所需浮點運算均在浮點運算模擬器(float math emulation)上進行,需要的浮點運算,常要耗費數千個循環才能執行完畢,因此特別緩慢。
  • 浮點運算為什麼不準?大數運算中也更有優勢
    浮點運算一直非常玄學。任何一個學過小數點運算的擁有小學數學水平的人,都應該知道 1.0-0.9=0.1。
  • 三菱PLC浮點運算應用指令
    浮點運算應用指令能實現浮點數的轉換、比較、四則運算、開方運算、三角函數等功能,浮點運算應用指令大都為32位指令。一、二進位浮點比較與區間比較指令本文引用地址:http://www.eepw.com.cn/article/201612/331348.htm二進位浮點比較ECMP指令比較源操作數S1與源操作數S2內的32位二進位浮點數,根據大小一致比較結果,對應輸出驅動目的操作數D指定軟元件開始的連續3個位軟元件的狀態,二、二進位浮點數與十進位浮點數轉換指令二進位浮點數轉換為十進位浮點數
  • 比拼浮點運算速度 超算排行榜是這樣「算」出來的
    6月17日,新一期全球超算500強榜單出爐,入選500強的所有超算浮點運算速度都突破每秒千萬億次,中國超算也在前四佔有兩席位置。普通計算機用指令運算速度衡量計算性能,而超算通常用浮點運算速度來衡量其性能。那麼,什麼是浮點運算速度,超算榜單為什麼會選擇浮點運算速度來進行比較?
  • 基於複數浮點運算的協方差矩陣的FPGA實現
    在充分應用FPGA並行處理能力的同時,為了擴展數據處理的動態範圍,減少數據溢出機率,避免數據截斷所產生的誤差,提高協方差矩陣的運算精度以及擴展該運算的通用性。本文以空間譜估計作為研究背景,研究了複數據運算和浮點運算的特點,提出了一種適用於任何陣列流型、任意陣元的基於複數浮點運算的協方差矩陣的FPGA實現方案。
  • Xilinx Vivado HLS中Floating-Point(浮點)設計介紹
    這是因為Fixed-Point有限的數據動態範圍,需要深入的分析來決定整個設計中間數據位寬變化的pattern,為了達到優化的QoR,並且要引入很多不同類型的Fixed-Point中間變量。而Floating-Point具有更大的數據動態範圍,從而在很多算法中只需要一種數據類型的優勢。
  • 基於FPGA高精度浮點運算器的FFT設計與仿真
    摘要 基於IEEE浮點表示格式及FFT算法,提出一種基2FFT的FPGA方法,完成了基於FPGA高精度浮點運算器的FFT的設計。利用VHDL語言描述了蝶形運算過程及地址產生單元,其仿真波形基本能正確的表示輸出結果。
  • 基於FPGA的高速流水線浮點乘法器設計與實現
    同時由於基於IEEE754 標準的浮點運算具 有動態範圍大,可實現高精度,運算規律較定點運算更為簡捷等特點,浮點運算單元的設計 研究已獲得廣泛的重視。設參與運算的兩個數A、B 均為單精度浮點數, 即:    2.2 浮點乘法器的硬體系統結構  本設計用於專用浮點FFT 處理器,因此對運算速度有較高要求。為了保證浮點乘法器 可以穩定運行在80M 以下,本設計採用了流水線技術。
  • 基於FPGA的複數浮點協方差矩陣實現
    採用FPGA(Field Programmable Gate Array)可以提高該類數位訊號處理運算的實時性,是算法工程化的重要環節。但是FPGA不適宜對浮點數的處理,對複雜的不規則計算開發起來也比較困難。故目前國內外協方差運算的FPGA實現都是採用定點運算方式。 在所有運算都是定點運算的情況下,每次乘法之後數據位寬都要擴大一倍。
  • 基於CORDIC算法的32位浮點三角超越函數之正餘弦函數的FPGA實現
    關鍵詞: CORDIC;自定義指令;IEEE-754標準化處理引言浮點超越函數的應用領域十分廣泛,涉及航空航天、機器人技術、實時語音、圖像信號處理、濾波技術、FFT變換等領域。因此,設計並實現浮點三角超越函數是非常重要的。
  • Radeon VII沒有完整的FP64雙精度浮點功能,然而這沒什麼所謂
    工藝製造的遊戲顯卡,採用第二代Vega架構,擁有60組NCU,共計3840個流處理器,配備了16GB HBM2顯存,帶寬達到了1TB/s,是現有RX Vega 64的兩倍多,總體性能也提升了25-30%之間,AMD在官方的PPT上表示這款顯卡不只是遊戲卡,但實際上他和專用的企業級產品Radeon Instinct MI60/MI50還是有很明顯的區別的,Radeon VII並沒有完整的FP64雙精度浮點功能
  • MSSQL數據類型-浮點數據類型 (real、float、decimal、numeric)
    浮點數據類型包括real型、float型、decimal型和numeric型。浮點數據類型用於存儲十進位小數。在SQL Server 中浮點數值的數據採用上捨入(Round up)的方式進行存儲,所謂上捨入也就是,要捨入的小數部分不論其大小,只要是一個非零的數,就要在該數字的最低有效位上加1,並進行必要的進位。由於浮點數據為近似值,所以並非數據類型範圍內的所有數據都能精確地表示。real型數據的存儲大小為4個字節,可精確到小數點後第7位數字。
  • 單精度、雙精度和半精度浮點格式之間的區別
    1 關於圓周率 π我們提到圓周率 π 的時候,它有很多種表達方式,既可以用數學常數3.14159表示,也可以用一長串1和0的二進位長串表示。 圓周率 π 是個無理數,既小數位無限且不循環。因此,在使用圓周率進行計算時,人和計算機都必須根據精度需要將小數點後的數字四捨五入。
  • 超低功耗浮點DSP TMS320C6745/47的特點性能及應用範圍
    德州儀器(TI)日前發布的兩款超低功耗浮點DSP──TMS320C6745、TMS320C6747,以及一款結合ARM應用處理器與浮點DSP的OMAP-L137。三款組件均以TI C674x DSP核心為基礎,具備浮點優勢與過去定點裝置獨具的聯機外圍、低功耗及低成本等特性。 新的C6745、C6747 DSP及OMAP-L137應用處理器包含USB 2.0/1.1、10/100乙太網絡及多媒體適配卡/安全數字(MMC/SD)外圍,開發人員可輕鬆地在設計中加入聯機功能選項。
  • 全球超算500強榜單出爐:日本「富嶽」蟬聯冠軍,基於ARM架構運算...
    全球超算500強榜單出爐:日本「富嶽」蟬聯冠軍,基於ARM架構運算性能破紀錄  Evelyn Zhang • 2020-11
  • 為什麼0.1+0.2不等於0.3?原來程式語言是這麼算的……
    為什麼結果不是 0.3?本文作者給出了詳細的解釋。從小我們就知道 0.1 + 0.2=0.3。但是,在光怪陸離的計算世界中,運算方式卻大相逕庭。我最近開始用 JavaScript 進行編碼,在閱讀數據類型時,我注意到 0.1 + 0.2 不等於 0.3 的奇怪行為。
  • 詳解FPGA如何實現FP16格式點積級聯運算
    編者按:通過使用Achronix Speedster7t FPGA中的機器學習加速器MLP72,開發人員可以輕鬆選擇浮點/定點格式和多種位寬,或快速應用塊浮點,並通過內部級聯可以達到理想性能。
  • python教程之python數學運算
    ,math.isinf(float(b))) #輸出true#decimal模塊:decimal意思為十進位,這個模塊提供了十進位浮點運算支持from decimal import Decimalnum1=Decimal('0.5534')num2=Decimal('0.427')num3=Decimal('0.37')