0
我知道我使用的是沒有內置到C++的功能,但是這個庫看起來很常用,我很驚訝地發現這個錯誤會彈出。這是C++半庫的問題嗎?
對於那些不瞭解圖書館的人可以找到here。本質上,它應該允許支持16位浮點數(較低精度)。
我的問題是,半數的精度似乎減少了正數。
在這段代碼中,我正在生成一堆要通過OpenGl呈現到屏幕上的點。 {xs1,ys1}表示sigmoid的浮點精度計算。 {xs3,ys3}表示轉換爲浮點精度的值。
vector<float> xs1, ys1, xs3, ys3;
int res = 200000;
for (int i = 0; i < res; i++)
{
float prec = float(i)/float(res);
float fx = ((perc - 0.5) * 2.0)*8.0;
half hx = half(fx);
float fy = MFunctions::sigmoid(fx);
half hy = half(fy);
xs1.push_back(fx);
ys1.push_back(fy);
xs3.push_back(float(hx));
ys3.push_back(float(hy));
}
下面是結果(看着在此產生具有2.2的窗口寬度和0.02單位的窗口高度的曲線圖的部分放大):
當尋找在浮動精度曲線圖中,{ XS1,YS1}兩個S形函數的角部是平滑:
但是,着眼於半精度圖表{XS3,YS3}在正x軸的角時顯示,而角步進效果在負x軸顯示較低的分辨率,但s mooth圖:
我不知道爲什麼發生這種情況,因爲正數和負數之間唯一的區別應該是一個符號位。
有沒有什麼事是我做的還是這是在半庫中的漏洞?
低得多是不是它的情況下那個sigmoid值是[0; 1]?所以這是完全正常的,圍繞1,精度比0附近 – geza
哦,你是對的要低得多!我試了一下翻譯,看見階梯效應出現在兩側。隨意寫一個答案,所以我可以接受它。 – CalebK