
float double差異 在 コバにゃんチャンネル Youtube 的最佳貼文

Search
大部分平台的浮點數實現遵循IEEE 754, float 型通常是32位, double 型通常是64位。 long double 型通常是比 double 型精度更高的類型,但各平台的實現有較大差異。在 ... ... <看更多>
使用關係運算子比較浮點值( float 或 double )時應該小心: == , != , < 等。 ... 如果兩個數字之間的差異小於delta,則認為它們相等。例如 ... <看更多>
#1. float和double有什麼區別?_部落格園精華區
但double 消耗記憶體是float 的兩倍,double 的運算速度比float 慢得多, C 語言中數學函式名稱double 和float 不同,不要寫錯,能用單精度時不要用雙精度 ...
不像 int (整數),一個 float 有一個小數點,所以 double 。但是兩者之間的區別在於 double 是兩倍於 float ,表示小數點後的數字數量可以加倍。
float 單精度浮點數在機內占4 個字節,用32 位二進位描述。 double 雙精度浮點數在機內占8 個字節,用64 位二進位描述。
對程式設計人員來說,double 和float 的區別是double精度高,有效數字16位,float精度7位。但double消耗記憶體是float的兩倍,double的運算速度 ...
#5. 為什麼Float和Double會有誤差(浮點數儲存原理) | 石頭的coding ...
【C#】 Math.Round (128.5) = 128 真假四捨五入? 【C#】 AOP輕型框架AwesomeProxy.Net 介紹使用 · Struct V.S Class 兩者之間差異 · 五分鐘快速了解[傳址 ...
float 单精度浮点数在机内占4 个字节,用32 位二进制描述。 double 双精度浮点数在机内占8 个字节,用64 位二进制描述。 浮点数在机内用指数型式表示,分解为:数符, ...
#7. 【C++】float和double有什麼區別? - 程式人生
差異 很大。 顧名思義, double 的精度是 float [2]的2倍。通常, double 的精度為15個十 ...
#8. c語言float與double的取值區別? - 劇多
區別:. 1、精度不一樣,float是單精度,double是雙精度;. 2、表示小數的範圍 ...
c 中,float double區別,1樓為江山放棄了愛區別一精度的區別float為單精度,記憶體中佔4個位元組,有效數位是7位。 double為雙精度,佔8個位元組,
#10. 問題.NET中的decimal,float和double之間的區別? - 程式設計 ...
Decimal,Double和Float變量類型在存儲值方面有所不同。精度是主要區別,其中float是單精度(32位)浮點數據類型,double是雙精度(64位)浮點數據類型,decimal是128位浮 ...
#11. 浮點數值型別- C# 參考
2022年2月7日 — 瞭解內建的c # 浮點數類型: float、double 和decimal. ... 由於數數值型別有這項差異,因此當您使用 double 或 float 小數資料時,算術計算可能會 ...
#12. 實數(浮點數)
實數變數分為:單精確度(float型)、雙精度(double型)和長雙精度(long double型)三類。 在Turbo C中單精確度型占4個位元組(32位元)記憶體空間,其數值範圍 ...
#13. C語言,DEVc裡float和double - 迪克知識網
的區別是double精度高,有效數字16位,float精度7位。但double消耗記憶體是float的兩倍,double的運算速度比float慢得多,c語言中數學函式名稱double.
#14. Java中float和double數據類型的正確比較方式 - 人人焦點
當我們知道問題時,下面來看看如何解決它。 使用編程,不能改變這些浮點數的存儲或計算方式。 所以必須調整一個解決方案來確定兩個值之間的差異,可以容忍 ...
#15. C裡float和double有什麼區別 - 貝塔百科網
c++中,float double區別. 2樓:為江山放棄了愛. 區別:一、精度的區別. float為單精度,記憶體中佔4個位元組,有效數位是7位。 double為雙精度,佔8 ...
#16. 【轉載】 C#中float、double以及decimal類型有何不同 - ZenDei
在sqlserver資料庫中,float類型和double類型都可以用來表示小數類型,float類型是一種近似數值的小數類型,而decimal類型則是精確數值的小數類型。如果需要在sqlserver ...
#17. 15. 浮點數運算:問題與限制— Python 3.10.2 說明文件
只要程式語言有支援硬體的浮點數運算,你將會看到同樣的事情出現在其中(雖然有些程式語言預設不會顯示該差異,有些甚至是在所有的輸出模式中都不會顯示。).
#18. 單精度與雙精度是什麼意思,有什麼區別? - GetIt01
Boss呱呱:java浮點類型float和double的主要區別,它們的小數精度範圍大小是多少? 要先理解3大要點:. 小數的二進位表示法,即浮點數,IEEE 754; 浮點數如何 ...
#19. 基本資料型態共有八種
浮點數, double, 64, 依據IEEE 754 標準 ... 以下表示布林值 (Boolean value) 、字元 (character) 、整數 (integer) 與浮點數 (floating-point number) 的字面常數 ...
#20. float double 差別
對編程人員來說,double 和float 的區別是double 精度高,有效數字16 位,float 精度7 位。但double 消耗內存是float 的兩倍,double 的運算速度比float 慢得多,C ...
#21. float和double有什麼區別
C++ 中float 與double 類型的精度區別double 精度高,有效數字15-16 位,float 精度低,有效數字6-7位,但是double 消耗的內存是float 的兩倍,運算速度比float 慢得多, ...
#22. double float 差異– float c - Modernp
Java 中float 和double 變量的區別。 我想我會問一下,Teensy 3 上的double 和float 之間是否確實存在差異。 double 和float 表示之間的唯一區別是偏差值。 舉個例子,Java ...
#23. 資料型態
用來表示小數值,可以區分為 float 、 double 與 long double ,越後面的型態使用 ... 以上的資料型態在記憶體中佔有的大小依編譯器而有所差異,想知道這些資料型態在 ...
#24. 基本資料型態- Java備忘筆記 - GitBook
Java預先定義好的資料型態有這八種: char, byte, short, int, long, float, double, boolean. 型態名稱. 位元數. 表示範圍. 預設值. boolean.
#25. 浮點數- 維基百科,自由的百科全書
以這種表示法表示的數值,稱為浮點數(floating-point number)。 ... 由於浮點數不能表達所有實數,浮點運算與相應的數學運算有所差異,有時此差異極為顯著。
#26. float double 差異 - EDLV
float double 差異 ... C语言中,float和double都属于浮点数。区别在于:double所表示的范围,整数部分范围大于float,小数部分,精度也高于float。举个例子:圆周率 ...
#27. C语言中float和double的区别
对编程人员来说,double 和float 的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,C语言中数学函数 ...
#28. Coding4Fun - 浮點數存在的意義 - 黑暗執行緒
double 跟float 計算速度相同,差別在會double 多用一倍空間(8 Bytes vs 4 Bytes),如果數值用到的總位數小於9 位(整數與小數部分合計),float 是最快最省 ...
#29. Day10 PHP數據類型--基本類型之數字與布爾型 - iT 邦幫忙
數字類型包括兩部分:分為整數(integer縮寫為int )和浮點數(float)。 ... 整數,浮點數是用來儲存小數的資料型別浮點數可以細分為float(單精度)和double(雙精度), ...
#30. Java 中的浮點數和Double 資料型別
本文重點介紹Java 中的float 和double 資料型別. ... double d3 : 3.3333332538604736. 兩種資料型別之間的差異可以用給定的表格資料來說明。
#31. Sql的decimal、float、double類型的區別 - 壹讀
三者的區別介紹. float:浮點型,含字節數為4,32bit,數值範圍為-3.4E38~3.4E38(7個有效位). double:雙精度實型,含字節數為8,64bit數值 ...
#32. float跟double小知識 - 亂貼小站
C++語言的浮點數表示法有單倍精確度float與雙倍精確度double兩種, 此兩種是由IEEE 754來規範的。 其中雙倍精確度會比單倍精確度來的精準, 單倍精確度可表示的範圍 ...
#33. 2. 浮點型
大部分平台的浮點數實現遵循IEEE 754, float 型通常是32位, double 型通常是64位。 long double 型通常是比 double 型精度更高的類型,但各平台的實現有較大差異。在 ...
#34. C語言double和int有什麼區別,各個表示範圍是多少,d - 多學網
C語言double和int有什麼區別,各個表示範圍是多少,d,1樓楊維偉哥區別double雙精度浮點數,就是有小數點的數,並且範圍大於intint整型,只能表示整數 ...
#35. 基本型別· Swift 起步走
型別標註; 整數; Float, Double 浮點數; 整數和浮點數轉換 ... Double )指的是有包含小數點的數字, Float 跟 Double 的差別在於精確度, Float 有6 位數,而 Double ...
#36. 8.1. 數字型別
PostgreSQL 接受float(1) 到float(24) 選擇視為real 型別,而float(25) 到float(53) 則視為double。p 超出允許範圍的話會產生錯誤。沒有指定精確度的浮點數意味著double。
#37. 4-4 四捨五入
#include <stdio.h> int main() { float a=4.21, b=3.1; //定義a為小數4.21,b為 ... 型別(real floating type),分別是 float 、 double 、 long double ,差異是 ...
#38. [一起來看Swift 官方文件] — 基本型別 - Medium
顧名思義,兩個的差異就差在精確度, Float 可表示6 位數,但是Double 至少可以表示15 位數。 還記得上一篇提到的型別推斷嗎?在宣告浮點數時,如果不特別標記型別 ...
#39. float double 精度 - Toky
陶參考文章FLOAT 與DOUBLE 差異(單精度與雙精度有什么區別) 最本質的區別:單精度,也就是float ,在32 位機器上用4 個字節來存儲的;而雙精度double是用8 個字節來 ...
#40. 資料型態、運算子與表示式
不同資料型態間的差異[P.55]. 整數(short int, int, long int) 的可表⽰示範圍[P.56]. 浮點數(float/double) 的表⽰示法[P.58] printf 與scanf 的格式字串[P.59].
#41. C ++和C#中Float的定義
Float vs. Double和Int ... 浮動和雙重是類似的類型。 Float是一個單精度的32位浮點數據類型; double是一個雙精度,64位浮點數據類型。 最大的區別在於精度和範圍。 雙人: ...
#42. Bit - 演算法筆記
unsigned 變數與singed 變數實施位元運算,其實沒有太大差異。唯一的差異之處, ... C/C++ 程式語言當中,可以直接使用float 、 double 、 long double 建立浮點數。
#43. double float 精度FLOAT - RJRSW
double float 精度FLOAT · FLOAT 與DOUBLE 差異(單精度與雙精度有什么區別) … · 關于float和double精度的問題-CSDN論壇 · 3.14是float型還是double型?-常見問題-PHP中文網.
#44. 彙編學習:float與double速度問題 - 台部落
意思是當使用XMM寄存器時,單精度浮點的除法、開根及一些數學函數的執行要比雙精度快,但加法,減法、乘法的計算速度二者沒有差異(在沒有使用向量操作時 ...
#45. [浮點數] IEEE754 , C/C++ 浮點數誤差@ Edison.X. Blog - 痞客邦
故若非調用顯卡API 時(不知道這動作沒關係,下一句才是重點),筆者建議盡量使用64 bits 之double ,它除了比float 多吃32 bits 之外,不論速度、精準 ...
#46. FLOAT(數據類型) - 中文百科全書
可根據應用程式的需求將變數聲明為float 或double。這兩種類型之間的主要差異在於它們可表示的基數、它們需要的存儲以及它們的範圍。下表顯示了基數與存儲需求之間的 ...
#47. 浮點型_百度百科
大部分平台的浮點數實現遵循IEEE 754,float型通常是32位,double型通常是64位。 long double型通常是比double型精度更高的類型,但各平台的實現有較大差異。在x86平台上, ...
#48. 實值型別- 具有小數點的非整數數值 - 康廷數位
在「Floating-point types table (C# Reference)」列舉了所有的整數型別,進入頁面可以看到以下的列表清單截圖。 float 與double 浮點數型別包含了float ...
#49. C++ 的基本資料型態@ 程式手扎:: 隨意窩Xuite日誌
用 來表示小數值,可以區分為float、double與long double,float的長度為 ... 以上的資料型態在記憶體中所佔有的大小依平台系統而有所差異,word的大小取決於機器, ...
#50. 9-4 矩陣的內部資料型態
一般矩陣的內部資料型態都是預設成double(雙精準浮點數),但在MATLAB 5.3 版之後,也支援不同長度的整數與浮點數資料態,整理如下表: ...
#51. 資料型別與運算
浮點數, 有, 32, float, 10 ^-38 ~10 ^38. 64, double, 10 ^-308 ~10 ^308 ... 123.0L表示十進位的double. 123.0e-8表示123*10 -8 的float. 'a'表示char.
#52. 第二章常數與變數宣告變數(variable) - 林偉川
double :倍精數(double precision floating point) 資料型別, 也是用來存放浮點數型別,. 但是小數的位數比float 多, 因此精確度更. 高。長度為8 bytes, 範圍為2.2e-308 與.
#53. java中double和float区别_daiqinge的博客
float :占4个字节double: 占8个字节double 和float 的区别是double精度高,有效数字16位,float精度7位(可提供7位或8位有效数字,构成包括符号位、 ...
#54. float double 精度FLOAT - Xvleq
陶參考文章FLOAT 與DOUBLE 差異(單精度與雙精度有什么區別) 最本質的區別:單精度,也就是float ,在32 位機器上用4 個字節來存儲的;而雙精度double是用8 個字節來 ...
#55. 數字型態
FLOAT (precision) ... 若 25 <= precision <= 53 的話,則視為 DOUBLE(倍精數) ... 或「INT(5)」,都不影響它儲存數值的能力;但在顯示時,就可以發現其差異了。
#56. 能不能用double 去取代float? - 知乎
float 通常是使用IEEE 754 标准中的binary32 表示,以二进制方式、用32位存储浮点数。 double 通常是binary64。 其实IEEE 754 标准中还有较少用到的binary16(常称 ...
#57. [Mysql] 資料型態int, float, double, text, char, varchar, blob大小
[Mysql] 資料型態int, float, double, text, char, varchar, blob大小 ... FLOAT、DOUBLE、DECIMAL使用時機: ... CHAR、VARCHAR 和TEXT的差異:.
#58. JAVA對double或者float的浮點數精度計算控制方法 - Eaey
32bit,其中符號位表示數字分正負,佔位23位。 java浮點類型 float 和 double 的主要區別。它們. float:浮點型double:雙精度實型decimal:數字型單精度浮點 ...
#59. MySQL中的float和decimal型別有什麼區別 - 程式前沿
float,double容易產生誤差,對精確度要求比較高時,建議使用decimal來存,decimal在mysql記憶體是以字串儲存的,用於定義貨幣要求精確度高的資料。
#60. SQL 資料型態-浮點數計算誤差 - Louis學習筆記
一般在處理帶有小數點的數值我們會將資料型態設定為浮點數而MSSQL中常見的浮點數有Real:儲存七位有效數Float:儲存十五位有效數Decimal:儲存三十七 ...
#61. float的精度
首先直接寫答案:字節: float:4個字節double:8個字節精度: float精度是:7~8位有效 ... FLOAT 與DOUBLE 差異(單精度與雙精度有什么區別); 浮點數值類型 ...
#62. FLOAT[數據類型] - 中文百科知識
可根據應用程式的需求將變數聲明為float 或double。這兩種類型之間的主要差異在於它們可表示的基數、它們需要的存儲以及它們的範圍。下表顯示了基數與存儲需求之間的 ...
#63. float和int 的比較 - 城市筆記
以下的範例,是用來示範float在表示數字和運算上的一些數字,當我們學會loop後,我會在用loop示範float和int在運算速度上的差異! CODE: #includ main (){ ...
#64. 4-4 四捨五入| DICE C語言程式破解 - CHAWTeam
#include <stdio.h> int main() { float a=4.21, b=3.1; ... 點實數型別(real floating type),分別是 float 、 double 、 long double ,差異是其 ...
#65. 比較浮點值 - 他山教程
使用關係運算子比較浮點值( float 或 double )時應該小心: == , != , < 等。 ... 如果兩個數字之間的差異小於delta,則認為它們相等。例如
#66. Java 程式設計講義
Java 擁有8 種基本資料型態byte、int、short、long、float、double、char 和boolean。例如:. 整數變數宣告的範例,如下所示: int score; int i, j, score;.
#67. 第三章變數與運算式
浮點數資料型態(float,double) ... 精準度兩種,宣告使用的關鍵字分別為float與 double。 ... 設定字串內容,但實際上背後的運作則有一些差異,我.
#68. 第3 章Python 的資料
∗ 資料型態(Data type) :不同的資料值屬於不同的資料型態 · ▸ 整數(Integer):例如5 · ▸ 浮點數(Floating point, Float):例如3.2 · ▸ 字串(String):由一連串的字元組成 ...
#69. 單精度與算力
浮點型變數分為單精度(float)、雙精度(double)和長雙精度(long double)3類。在Turbo C 中: 比特(位)數有效數字 float 32 6-7 double 64 15-16
#70. 的變數可以用來存放整數(Integer) 型態的資料
浮點數資料依據所能表示的數值範圍, 還可區分為float 與double 兩種, 下表列出可表示 ... 表示String 必定和基本資料型別有所差異, 目前您至少知道String 是參照型別, ...
#71. MySQL中的float和decimal型別有什麼區別
float,double容易產生誤差,對精確度要求比較高時,建議使用decimal來存,decimal在mysql記憶體是以字串儲存的,用於定義貨幣要求精確度高的資料。
#72. FLOAT - 浮點型數據類型 - 華人百科
可根據應用程式的需求將變數聲明為float 或double。這兩種類型之間的主要差異在於它們可表示的基數、它們需要的存儲以及它們的範圍。下表顯示了基數與存儲需求之間的 ...
#73. 浮點數型態的差異??? - Delphi K.Top 討論區
大多數的浮動小數點型態,如float, real, double之類的,都是使用IEEE 754的方式來儲存資料,這種方式只能確保在某一位以前的數值是正確的如果你希望 ...
#74. 開源技術教學網[C 語言] 程式設計教學:資料型態(Data Type)
C 語言的浮點數細分為三種:. float; double; long double (C99). 三種浮點數在最大值、精準位數等會有一些差異。一開始時,先一律用 double 即可,之後再學著依情境 ...
#75. SQL中的real、float、decimal、numeric資料型別區別 - 有解無憂
SQL中的real、float、decimal、numeric資料型別區別. ... DECIMAL(size,d) 作為字串存盤的DOUBLE 型別,允許固定的小數點,在括號中規定最大位數,.
#76. double精度double和float什么區別_百度知道翻譯此網頁 - Itemn
double 精度double和float什么區別_百度知道翻譯此網頁. double的精度為15~16位。 難道只是位數多大的問題,經常出現精度丟失的問題,其整數部分始終是一個隱含著 ...
#77. 新手求教C: float與double(頁1) - 程式編寫 - 電腦領域
因此差別指在於儲存空間而已。 若是把SIMD這個函式庫(單指令存取多筆資料)納進來考慮,在不考慮精度的情況下,當然一組SIMD的暫存器能塞越多筆浮點數 ...
#78. float與double的範圍和精度 - w3c學習教程
float 與double的範圍和精度,float與double的範圍和精度1 範圍float和double的範圍是由指數的位數來決定的。 float的指數位有8位,而doub.
#79. Re: [問題] float 和double 的問題- 看板C_and_CPP - 批踢踢 ...
拋磚引玉。引文做high-light。 可能要講的太多了,也不知道你對於IEEE754 了解到哪種程度,所以大多人也不知該從何講起,唯這問題似乎真的卡很久, ...
#80. 有關浮點數的效能
浮點數是指單精度浮點數float與雙精度浮點數double。 ... 傳輸頻寬的上限時,單精度當然能傳輸高於雙精度的資料量(單位),因此會有著兩倍的差異。
#81. mysql中float、double、decimal三種類型,以及數值產生誤差 ...
建議:將float改成double或者decimal,兩者的差別是double是雙精度浮點計算,decimal是定點計算,會得到更精確的數據。 float列類型默認長度查不到 ...
#82. Difference between float and double in C language Hindi
#83. 比較float比double更高效嗎? - 優文庫
假設所考慮的唯一數字類型是float,double,int,long,unsigned int,unsigned ... 函數的巨大循環的瓶頸,在這種情況下,你可以自己測試性能差異並作出相應的反應。
#84. SLMT's Tutorial Blog: 小山的C# 教學-第7課-變數宣告意義與型別
此課在解釋為何變數需要進行宣告另外進一步地介紹之前提過的int 型別並另外介紹float、double、bool 型別的變數 教學影片 注意:影片有高畫質720P 的 ...
#85. float是以下哪種數據類型 - Grossha
float double 六種,使用者自定的型態是指以enum, struct, union 所定義之型 ... 浮點數的實現在各種平臺上差異很大,有的處理器有浮點運算單元(FPU,Floating Point.
#86. Java 複習筆記: 資料型態與語法 - 小狐狸事務所
一. include 與import 的差異: ... Java 的實數有兩個: float 與double, 實數常數有浮點數與科學表示法兩種表示法, 在數值末尾可以加f/F 或d/D 指定 ...
#87. c double 位數
實數變數分為:單精確度(float型)、雙精度(double型)和長雙精度(long double型)三類。 ... 我們常用32 bits(C稱為float)或64 bits(C稱為double)來存放浮點數, ...
#88. double float 範圍請問java中的double - OTQZ
同樣是占32個坑,因此差異為29。因此,float 32位IEEE754標準1.8.23格式表示范圍,采用了IAny 這一個弱類,這個你應該看的懂吧? 不同種類的變數,截取IDL中float ...
#89. 基本變數-數字int、float - 行銷搬進大程式
何謂變數?等號「=」是什麼?Python中「=」 與「==」的差別?整數(Int)與浮點數(Float)的差別?原因在於早期的年代,電腦的記憶體容量不多, ...
#90. 浮點數誤差IEEE-754 - 展維隨筆
浮點數誤差IEEE-754 在程式語言中,浮點數基本都是用float 與double來表示,但都會存在誤差float t1 = 0.69 * 10; cout << setprecision(32) << t1 ...
#91. double 精度范围
java面试官Double为什么会丢失精度?解决方法?答出给1万月薪… 陶参考文章FLOAT 与DOUBLE 差异(单精度与双精度有什么区别) 最 ...
#92. 我應該使用double還是float? | C++ 2021 - 事實的百科全書 ...
在實踐中,您可以幾乎看不出任何速度差異-無論如何,它們都是硬件的本機。 ... 共有三種浮點類型:float,double和long double。 double類型至少提供與float一樣的 ...
#93. Разница между поплавком и двойным - site-logo
Основное различие между float и double заключается в том, что тип float имеет 32-битное хранилище. С другой стороны, тип double имеет 64-битное хранилище.
#94. 分析一次double強轉float的翻車原因
float 是 單精度浮點數 ,double是 雙精度浮點數 . 單精度與雙精度什麼區別. 根據國際標準IEEE 754,任意一個二 ...
#95. Back to Basic: 談浮點數的比較 - novus log - 痞客邦
double x = 0; while (x != 5.0) { x += 0.1; }. 不同的計算環境可能採用不同的浮點數系統,但進制轉換、儲存、運算的誤差必然存在。
#96. 單精度和雙精度浮點運算之間有什麼區別?
這就是為什麼Double稱為double float的原因. 根據IEEE754``浮點存儲標準''.32和64位標準(單精度和雙精度)。分別為8和11位指數。擴展格式(尾數和指數)用於中間結果.
#97. .NET中小數,浮點數和雙精度之間的區別? - Siwib
之間有什麼區別 decimal , float 和 double 在.NET中? 有人甚麼時候會使用其中之一? 1篇有趣的文章zetcode.com/lang/csharp/datatypes ...
#98. double float 範圍float與double的范圍和精度 - Jkveno
單精度與雙精度是什麼意思,有什麼區別? float為單精度實數,double為雙精度實數1,單精度,也就是float ,在32 位機器上用4 個位 ...
float double差異 在 Re: [問題] float 和double 的問題- 看板C_and_CPP - 批踢踢 ... 的推薦與評價
拋磚引玉。引文做 high-light。
可能要講的太多了,也不知道你對於 IEEE754 了解到哪種程度,所以大多人也不知該從
何講起,唯這問題似乎真的卡很久,只丟一點小弟知道的東西討論。
但是我看有些網頁用IEEE745的表示法下去算..
範圍卻是1.2E-38~3.4E+38 不知道那個是正確的呢??
這個是正確的,詳細的推導在中文的 wiki 介紹就很清楚了,但尷尬的是浮點數表示法
不一定從 IEEE754 規格,即使從 IEEE754 規格,不同編譯器細節上的操作也可能會有
所不同,如果我沒記錯的話,gcc 3.4.1 (就是你 dev-c++ 用的 gcc 版本) 和 vc 在
運算上,及最小值定義上就有所不同。故一般書籍都是建議去查 float.h 之 macro。
float a=0.01;
首先 a 存 0.01 時,在存入 ieee 754 就會有誤差了,單純轉成二進位約是
0.000000 101000111101011100001010 0011110101 ....
正規化後得 1.01000111101011100001010 * 2^-7 ,再存入 IEEE754 欄位中。
但將上面這數值再轉回十進位時,它只能存 23 位(加上小數點前隱性的1是24位),
這種實際上不只23位可表達的十進位,最後必然產生捨位誤差(Lemma),實際上得到
的就已經不是 0.01,捨位誤差後得到的約是
0.0099999997764826
Q1 : 可是書上寫的是「小數後7位」,你上面寫的已經到「16位了耶」
A1 : 所以說了,書上寫的都只是概估值,他們說的「小數點後七位」,算法是
2^(23+1) = 10^x , x = log10(2^24) = 24 * log10(2) = 7.22,但這數
據也只能當參考而已,我們光是拿最後一個 mantissa 位元 2^-23 這位來算,
它實際表示是 0.00000011920928955078125 ,是小數點後 23 位,不就超過小
數點後七位了嗎?
其中2^(23+1),裡面的 +1,正代表著正規化後,小數前唯一的一個1。
Q2 : 可是我用 printf 根本就看不出來它的效果耶?
A2 : 原因是 printf 根本就沒在分 %f, %lf,在 printf 裡面,你拿 double / float
混用於 %f , %lf 結果都是一樣的,會先轉成 double,(強調是 printf )
這種方式根本就看不出結果,所以關於 float/double 混用比較建議自己搞。
[Lemma] 「捨位誤差」有時候會看小數後第 24 位,像是十進位表示法的「四捨五入」
,如果第24位是0就刪掉,如果第24位是1,前23位都加1。這種做調整的方式
不只一種,像無條件進1、無條件捨去等 (所以產生了四捨六入五成雙說法),
但這裡小提一下,就不再深入。
我還是覺得奇怪..如果浮點數存的時候就有誤差(因為只有23位可存尾數)..
所以存在電腦裡應該0.01是存成0.00999999....
那在printf("%f",0.01)的時候..應該就會印成0.00999999
原因是預設列印是輸出小數後 6 位數進行四捨五入,然後答案是 0.009999999...
自然就變 0.01。
這樣乘下來怎麼去看它的結果精確度到幾位?
還有我參考了很多文章..都說乘法時並不是用float下去算是用double
儲存再放到float裡..又更複雜了..
這個我記得有可能是這樣情況沒錯,這問題實質上相依於 compiler 較多,確實
有些 compiler 在 float 運算時會先偷轉 double 再放到 float,如 BCB 就這
樣,原因是對於現代 GPU 而言(扣除掉叫顯卡做這運算),double 除了精度高,
速度也比 float 還快,(所以一般 C++ 調用 double 系列之 math library ,
有些情況下比調用 float 系列之 library 速度來得快),其他部份沒再特別確認。
3535=110111001111
float 0.01*3 =1.0100011110101110*2^-7 X 1.01*2^2 (小數點後2位)
*3535= X 1.10111001111*2^11(小數點後11位)
(0) a = 0.01 (dec) = 1.01000111101011100001010 * 2^-7
b = 3535 (dec) = 1.10111001111000000000000 * 2^11
(1) mantissa 先相乘
1.01000111101011100001010(bin) * 1.10111001111000000000000(bin)
= 10.00110101100110011001100 1100010110000000000000 (bin)
上面這結果用手算會算到爆,建議直接先去找大數函式庫下來做
< 我是之前自己做過一份 binary 就是了 >
(2) 指數相加 , -7 + 11 = 4
(3) 正規化, c = a * b = 10.00110101100110011001100 * 2^4
= 1.00011010110011001100110 * 2^5
這個數字轉到 10 進位約是 35.3499984741210940(誤差約1.5e-6) ,
但誤差是從 0.01 開始就存在的,所以導致不如所預期的誤差在 1E-7 以下,
原因都是在於真正運算,必須考量實際是以二進位方式做運算,且會有捨位誤差
現象之存在。
再來是看這 sample。
int main()
{
float x = 0.01;
float y = x * 3535;
printf("%.16f\n", x * 3535);
printf("%.16f\n", y);
return 0;
}
兩個答案都是 35.349984741120940,但如果你使用了 %.2f,或%.3f 時,
這裡的「顯示」會是小數後 2/3 位四捨五入,達成「看似無誤差」的 35.350,
但真正數值還是要以二進位方式,深入欄位格式做分析才準!
有人知道怎麼看乘法的精確度嗎??
如果你期望的是,希望能正確在某次運算後,得到答案的 正確誤差值,那我只能說
很遺憾的,基本上辦不到,或很難!原因在於一般 user / coder 在填寫十進位字面
常量時,這時候就會有捨位誤差存在,甚至有其他更多原因可導致誤差,但說完大概
也出了一本書了。而誤差是多少?不一定!要看轉到欄位裡才知道,有些是 10^0 級
,有些是 2^-n 級, 更有些是 2^n 級,都不一定。
我沒記錯的話,之前自修看計算機組織與結構(白算盤),裡面有個章節都有討論 IEEE754
,而且還蠻詳細的,包含 + - * / 都有流程圖出來,裡面的 K 完會蠻有幫助的。
---
基本上這篇問題該回答的都答完了,如果有什麼其他不懂、疑惑的地方,
或許再以二進位方式做欄位分析,會得到更多答案。
其他比較 funny 的議題,像是小算盤按上 1/3 得到 0.33333333...,結果再 *3 ,
為什麼可以再回到 1 之類的 (有些計算機只能到 0.9999999),這種議題就留下來做
思考,不再贅述。
--
~ 這輩子與神手無緣
我只好當神獸了 ~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.76.161
※ 編輯: EdisonX 來自: 180.177.76.161 (01/17 20:29)
... <看更多>