怎樣實現浮點數除以乙個數再乘以這個數結果等於原值

時間 2021-05-30 04:08:54

1樓:guenchi

在有的程式語言中,比如Scheme,1.0 除以3 這個數會被表示為 1/3,然後乘以3會得到1。

就是說浮點數會以分數形式儲存和計算,直到最後輸出…

2樓:楊個毛

你要的這個東西叫Rational data type。

有些程式語言裡這個東西以語言特性的方式提供給你,有些語言裡這個東西以庫的形式存在。反正本質很簡單,就是用乙個分數去表示數值。

如果你下次又要精確地表示 sqrt(2) 或者 pi 一類的符號,還參與運算的話,rational data type 也不夠了。那麼你需要乙個 Computer algebra system。

3樓:Jim Liu

如果這裡說的浮點數就是通常語境下的IEEE754浮點數,那麼這個是無法(保證)做到的。

浮點數乘法要對階碼相加,尾數相乘,尾數相乘結果的位數必然是超過原來的長度的,以及最後做規範化的時候也會對尾數進行捨入,這樣計算過程中有效數字是肯定會丟的。

如果非要保留精度,那麼就只能用符號計算了。

4樓:Ivony

浮點數不能做精確計算,不能保證得到這個結果。只有把浮點數先精確的轉換為乙個可以做精確計算的數,例如有理數,然後再計算,再轉換回浮點數。但是,仍然不能保證轉換回浮點數的時候沒有損失。

也就是說,如果將浮點數1.0轉換為可以精確計算的有理數,然後除以3,這時候有理數可以精確儲存1/3這個結果,但是如果將1/3這個結果轉換回浮點數,那麼必然造成精度損失(除非是3進製浮點數),這時候資料就丟失了,再乘以3不能保證復原為1。只有1/3這個有理數進行乘以3計算可以精確的得到有理數1,再轉換為浮點數1,此時不會丟失資料。

5樓:SuperFashi

實數無非就是有理數和無理數。對於有理數來說表達為分數,然後做分子分母運算即可。對於無理數來說直接帶著無理數(相當於無理數/1)運算就好。

6樓:

我隨便想了想……用整數相除的有理數資料結構來儲存浮點數。鑑於浮點數都是有理數,你的問題只涉及乘除,我覺得可以做到無損復原。

7樓:

如果一定要儲存為浮點數的話,對於你所舉的例子,做不到。

Computer algebra

實際工程運用上,在我所知的範圍內,沒有要求無限精度的情況。

8樓:facetothefate

瀉藥,最簡單的辦法是浮點數當成字串處理,然後按位乘.也可以通過字串消掉小數點然後當做整數處理直接相乘,最後在變成字串還原小數點的位置。

9樓:yc znone

浮點數本來就不是精確儲存和運算的,只能要求在一定精度下的儲存和運算是可靠的。

先把浮點數轉化為有理數,然後做有理數運算,最後再轉換回來。有理數運算不會有精度丟失,但是有理數轉換為浮點數,可能會丟失精度。

10樓:

精度丟失因為資料型別不同,系統會自動進行轉換:

用 1.0/3.0*3.0 應當就 OK 了。

如果結果是浮點數,那麼輸入也用浮點數,強制的。這也是 C 系列語言的問題,如果有分數或延遲計算支援,那麼就不存在這些問題。

考慮浮點數,如何實現跨平台數值穩定的漫遊 尋路演算法?

降低精度。不是需要物理運算的遊戲,位置只要保證小數點後 1位到2位就夠用了,角度直接用整數也夠用了。建議直接轉成整數。 Milo Yip 蟹妖,給你乙個思路,我們以前就是這麼幹的,就是確定浮點數精度的位數 比如,保留4位精度,就 10000 然後把浮點數轉換為整數 int64或者int,視最大值來定...

浮點數和字串相互轉換,哪種演算法實現起來比較容易?

豬大毛 float a 0.111 printf f fl main txt File f fopen txt Read f 邵老師 浮點數分成整數和小數兩個部分,分別進行單獨處理,最後和小數點符號合成乙個字串。include include using namespace std string G...

c語言可否定義一種128bit的浮點數資料型別?

Aman 所以不是如何定義,應該是如何實現。如果你要搞天文計算,有各種專用系統和工具 如果是搞貨幣計算,應該用整數計算 通過縮放 100 倍精確到分 來避免浮點計算的誤差。你的需求是什麼?這段是我的疑問,可以不用理會 GNU 系列編譯器實現了 float128,可以直接使用,這是編譯器實現的。VC ...