Thema: Delphi Rundungs problem?

Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Rundungs problem?

  Alt 1. Jun 2017, 17:58
AlphaCoef ist ein gerundetes Zwischenergebnis.
Bei 16 ist das natürlich größer und somit die Rundung geringer.
Aber die Rundung ist dennoch bei 8 und 16 drin, nur eben nicht gleich groß.
Ich habe da ein Beispiel in C von einem Forum wo ich gerade arbeite. (englisch nicht so mein Ding)

Da wird mir gesagt! Das rundungs Probleme auftreten auf der Basis dieser Berechnung.

Zitat:
it will be on some values...
for example alpha=250, color=251... then instead of 0 you will get 255,
same with 251:252, 252:253, 253:254, 254:255, ...
if use shift by 16, then there is no this problem
Shift 16 soll das Problem beheben mag ja in C++ zutreffend sein aber unter Delphi ?
Auf Grund dieser Berechnung.

Code:
      int err = 0;
      for (ULONG a = 0; a < 256; a++)
      {
         float rAlphaCoef = (float)((float)a / 255.0f);
         ULONG uAlphaCoef = a ? ((255 << 8) / a) : 0;

         for (ULONG c = 0; c < 256; c++)
         {
            BYTE n = (BYTE)(int)((float)c / rAlphaCoef);
            BYTE m = (BYTE)(((ULONG)c * uAlphaCoef) >> 8);
            if (n != m && abs(n - m) > 1)
               wprintf(L"error: a: %03d; c: %03d [n: %05d, m: %05d] %i\n", a, c, n, m, ++err);
         }
      }
Ich bin da jetzt etwas unsicher da ich ihm gesagt habe das ich mit Shift 8 eigentlich keine Sichtbaren unterschiede sehe da mein Icon die Transparenz hat die es haben soll.
Deshalb der Post.

gruss

Geändert von EWeiss ( 1. Jun 2017 um 18:00 Uhr)
  Mit Zitat antworten Zitat