簡體   English   中英

如何控制雙精度計算以避免C ++ Linux x86_64中的舍入錯誤?

[英]How to control double precision computing to avoid rounding errors in C++ linux x86_64?

在Linux x86_64上的C ++代碼中,我需要加倍精度計算(+或-)。

26.100000000000001-26 + 0.10000000000000001

我有:

0.20000000000000143

我想得到0.2。

這里,顯示格式不是導入的,計算結果將用於某些if-else分支條件。 因此,我只希望if-else條件比較小數點后的4位數字。

似乎是舍入錯誤?

如何將計算精度限制為小數點后4位?

我不想調用任何函數以避免開銷。

由於轉換開銷,我不想使用stringstream。

還有更好的主意嗎?

謝謝

計算精度很好。 這是您要控制的顯示精度 如果使用<iostream> ,則可以使用"%.4f" setprecision()進行操作;如果使用<stdio.h>則可以使用諸如"%.4f"類的格式化程序來進行。

您已經在調用函數了,因為您將結果顯示為十進制!

PS 0.1不能用floatdouble或任何二進制尾數格式精確表示。 它分解為(1/2) * (1/5) ,十進制1/5是二進制中的無限重復數字序列。

PPS看看GMP 這可能是您最大的希望。

如果只想打印它,則可以使用printf(“%10.4lf”)。 當然,您可以將精度更改為所需的任何值。

如果您只對等於小數點后四位的位數感興趣,則將所有內容乘以10,000,然后使用整數算術。 (乘以10,000后,可能需要四舍五入。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM