計算機處理浮點數時的誤差處理技巧
通常計算機在處理浮點數時,會產生誤差,下面介紹一種方法,可消除部分誤差的產生。如:
var
a,b,c:real;
begin
a := 68;
b := 5.6;
c := trunc(a*b*10)/10;
ShowMessage(floatToStr(c));
end;
這個算式的正確結果應該是:380.8,但你試著用計算機執行一下看看結果是什麼?奇怪,怎麼是380.7呢?呵呵,用下面我教你的方法,計算結果就為380.8了。
var
a,b,c:real;
begin
a := 68;
b := 5.6;
c := trunc(a*b*10+0.00001)/10;
ShowMessage(floatToStr(c));
end;
在算式中加個足夠小的小數,理論上不會對你的正確結果造成影響,但它確消除了誤差,不信你試試。
相關推薦
計算機處理浮點數時的誤差處理技巧
通常計算機在處理浮點數時,會產生誤差,下面介紹一種方法,可消除部分誤差的產生。如:var a,b,c:real;begin a := 68; b := 5.6; c := trunc(a*b*10)/10; ShowMessage(floatToStr(c));en
js處理浮點數計算誤差
眾所周知,浮點計算會產生舍入誤差的問題,比如,0.1+0.2,結果應該是0.3,但是計算的結果並不是如此,而是0.30000000000000004,這是使用基於IEEE754數值的浮點計算的通病,js並非獨此一家,今天我們就來看看js怎麼解決這個誤差的。 以下是針對加減乘除的解決方法: 加法: functi
js處理浮點數的加減乘除
//浮點數加法運算 function FloatAdd(arg1,arg2){ var r1,r2,m; try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0} try{r2=arg2.t
JS浮點數運算的處理
四捨五入 方法一: 在JS中四捨五入的函式 toFixed(n) , n為要保留的小數位數。 n為0~20,當n超過20的時候,JS會出錯。 如果小數點前和要擷取的前一位都是0時,不會按常理擷取。 var h=0.07 h.toFixed(1)的值為0.0 其實
計算機中浮點數的表示,IEEE 754標準
IEEE Standard for Floating-Point Arithmetic(IEEE 754,Institute of Electrical and Electronics Engineers)是1985年建立的浮點數計算的技術標準。解決了原來浮點數實現不一致的問題,許多硬體
js 浮點數計算誤差解決方法
eg:一個整數*一個小數出現的結果是 計算機程式語言裡浮點數計算會存在精度丟失問題(或稱舍入誤差),其根本原因是二進位制和實現位數限制有些數無法有限表示 * 以下是十進位制小數對應的二進位制表示 * 0.1 >> 0.0001 1001 100
UCOSIII中斷的相關處理及延時的處理
中斷管理 UCOSIII支援中斷巢狀的,高優先順序的中斷可以打斷低優先順序的中斷,最高支援250級中斷巢狀,OSInitNestingCtr就是記錄中斷巢狀層數的(進入+1,退出-1)。 中斷會打斷正在執行的的任務,轉而執行中斷服務程式,但是如果在執行中斷服務程式時有比之
計算機基礎——浮點數加減運算
•十進位制科學計數法的加法例子 1.123 × 10^5 + 2.560 ×10^ 其計算過程為: 1.123 ×10^5 + 2.560 ×10^2 = 1.123 ×10^5 + 0.002560 ×10^5 &n
計算機基礎——浮點數乘除運算
設兩個規格化浮點數分別為 A=Ma * 2^Ea B=Mb * 2^Eb ,則: A+B =(Ma + Mb.2^ -(Ea-Eb)). 2^Ea &nbs
組態王讀取modbusTCP裝置浮點數時的SWAPF暫存器設定
組態王讀取modbus裝置浮點數的時候,需要設定SWAPF暫存器,確定驅動程式怎樣排列浮點數當中的位元組順序。 位元組順序,只有0, 1, 2, 3四種取值。 例如在通訊時從0001地址讀取的四個十六進位制值為 HV1,HV2, HV3, HV4則: 當SWAP = 0時
計算機中浮點數的儲存方式
參考網址:http://blog.chinaunix.net/uid-28458801-id-3507427.html 根據國際標準IEEE 754,任意一個二進位制浮點數V可以表示成下面的形式: V = (-1)^s×M×2^E (1)(-1)^s表示符號位,當s
震驚!C++/C中輸出浮點數時的四舍五入竟可以被hack!
bsp cst www. family st2 print 控制 double 一份 假如我們遇到了這樣一道題: 【題目描述】 給你一個浮點數f,輸出它保留n位小數(四舍五入)後的結果。 【輸入格式】 輸入兩個數,分別為f和n。 【輸出格式】 一個數,即最終結果。 【
IEEE 754——計算機中浮點數的表示方法
楔子 #include <iostream> int main(int, char**) { std::cout.precision(20); float a = 123.45678901234567890;
C++ 字串轉換為浮點數時的精度問題
#include<stdio.h> /*庫檔案包含*/ #include<string.h> /*用於字串操作*/ #include<stdlib.h> /*用於exit函式*/ /***************************
【java】java處理隨機浮點數(小數點後兩位)用RMB的大寫數值規則輸出
pen junit toc get code package 部分 amp print 晚上上床前,拿到這個有意思的問題,就想玩弄一番: ====================================================================
一個將浮點數轉換成人民幣讀法字串處理(xxxx.xx格式)
主要是加深對陣列的理解在,這個程式原來是《瘋狂java講義》低第103頁上的一個例子,但是例子並不完整,對0的處理和對末位包括小數點後面處理不完整,因此這裡進行了完善。考慮到人民幣通俗叫法,浮點數格式為(XXXX.XX),轉換為字串格式為(x千x百x十x元x角x分),當然還要考慮末位開始位和零的處理
java 浮點數轉整數精度處理
System.out.println("------case1------"); BigDecimal bigDecimal = new BigDecimal(37.98); System.out.println(bigDecimal); //37.9799999999999968736
浮點數的那些坑,Java中的金額處理方案
Java中的浮點數由於精度問題經常出現意料之外的結果,而我們又不得不和RMB打交道的 有任何問題,歡迎Email to: [email protected] 1.舉個栗子: public static void main(String[] args) {Syst
Bailian2799 浮點數格式【文字處理+最值】
2799:浮點數格式 總時間限制: 1000ms 記憶體限制: 65536kB 描述 輸入n個浮點數,要求把這n個浮點數重新排列後再輸出 輸入 第1行是一個正整數n(n<=10000),後面n行每行一個浮點數,保證小數點會出現, 浮點數的長度不超過50位,注意這裡的浮點數會超過系統標準浮點數的表示範圍。
Java小記 —— 浮點數(double、float)的格式化問題及處理
平時常會面臨浮點數的格式處理問題,下面就舉例說一說常見的問題及處理: 1,科學計數法問題 一個浮點數123456789.10,在列印的時候變成了1.234567891E8,處理起來很簡單,如:double d = 123456789.10; System.