我正在使用最初在Visual C++中編譯的一些天文代碼。我正在使用32位VCL平臺上的C++ Builder XE4編譯它。VS C++與C++ Builder比較浮點數
在此代碼中,對於非常小的數字有很多比較,全部定義爲double
。下面的代碼片段顯示了來自VC++代碼的頭文件和一些示例比較。我需要的結果是在VC一樣++和C++ Builder,所以我有關於比較浮點數的一些問題:
不C++ Builder中比較浮點數一樣VC++?
在C++ Builder中,是否需要使用
CompareValue(double, double)
函數重寫代碼?如果我從
#include <cmath>
切換爲使用#include <math.h>
和#include <math.hpp>
,我會得到相同的結果嗎?
任何有關在兩個編譯器中獲得相同結果的建議都會有所幫助。
#include "stdafx.h"
#include <cmath>
#include <cassert>
using namespace std;
...
else if ((fgamma > 0.9972) && (fgamma < (1.5433 + details.u)))
{
if ((fgamma > 0.9972) && (fgamma < (0.9972 + fabs(details.u))))
{
if (details.u < 0)
...
比較是由硬件執行的,並且獨立於編譯器。你也擔心這太多了。例如,你甚至不能完全表示0.9972作爲浮點值。如果你關心精度,你爲什麼只有4位有效數字。很容易混淆,搞模糊思考,並且拋棄所有的'CompareMath'。別。試着更好地理解。最後,Q3是驚人的。不難發現什麼是cmath,什麼math.h是。做一些研究。 –
對於Q1,您需要查看實際編譯的機器代碼,以查看每個編譯器實際使用哪些CPU指令來比較運行時的浮點值。 –
這並沒有解決這個問題,但你並不需要所有的括號。 '如果(gamma> 0.9972 && fgamma <1.543 + details.u)'意思與第一個完全相同。 –