2017-08-11 2 views
0

Je sais que j'utilise une capacité non intégrée dans C++ cependant, cette bibliothèque semble être si couramment utilisée que je suis surprise de voir cette erreur surgir.Est-ce un problème avec la demi-bibliothèque C++?

Pour ceux d'entre vous qui ne connaissent pas la bibliothèque, il se trouve here. Essentiellement, il est supposé permettre la prise en charge de nombres à virgule flottante de 16 bits (précision inférieure).

Mon problème est que la précision des demi flotteurs semble diminuer pour les nombres positifs.

Dans ce code, je suis la génération d'un tas de points à rendre à l'écran par OpenGl. {xs1, ys1} représente le calcul de précision en virgule flottante de sigmoïde. {xs3, ys3} représente les valeurs exprimées en précision à virgule flottante.

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)); 
} 

Voici les résultats (en regardant zoomée dans des parties du graphique cela génère avec une largeur de fenêtre de 2,2 et une hauteur de la fenêtre de 0,02 unité):

En regardant le graphe flottant de précision, { XS1, ys1} les deux coins de la fonction sigmoïde sont lisses: enter image description hereenter image description here

Cependant, quand on regarde le graphique moitié de précision {de XS3, YS3} le coin dans l'axe positif x montre un effet de progression tandis que le coin dans l'axe x négatif montre une résolution inférieure, mais s graphique mooth: enter image description hereenter image description here

Je ne sais pas pourquoi cela se produit puisque la seule différence entre les nombres positifs et négatifs devrait être un bit de signe.

Y at-il quelque chose qui ne va pas ou est-ce un défaut dans la demi-bibliothèque?

+0

est-ce pas le cas que les valeurs sigmoïdes sont [0; 1]? Donc c'est tout à fait normal, qu'environ 1, la précision soit beaucoup plus basse qu'environ 0. – geza

+0

Oh tu as raison! J'ai essayé de le traduire et j'ai vu l'effet de pas apparaître des deux côtés. N'hésitez pas à écrire ceci comme réponse pour que je puisse l'accepter. – CalebK

Répondre

0

valeurs de sortie de la fonction sigmoïde sont [0; 1], donc ce que vous voyez est normal: dans l'image de fond, les valeurs sont environ 1, si la précision est beaucoup plus faible que dans 0.