Maszyna epsilon jest kanonicznie definiowana jako najmniejsza liczba dodana do jednego, daje wynik inny niż jeden.Gdzie mogę znaleźć epsilon maszyny w C#?
Istnieje Double.Epsilon
, ale nazwa jest bardzo myląca: jest to najmniejsza (zdenormalizowana) wartość Double
reprezentowana, a zatem bezużyteczna przy wszelkiego rodzaju programowaniu numerycznym.
Chciałbym uzyskać prawdziwą epsilon dla typu Double
, tak że nie trzeba hardcode tolerancji w moim programie. Jak mam to zrobic ?
Ważne: http://www.johndcook.com/blog/2010/06/08/c-math-gotchas/ – AakashM
@AakashM: Przeczytałem to. Znaczenie epsilon jest dość jasne w świetle IEEE754 i szkoda, że Microsoft zrobił coś tak amatorskiego. Czy ich implementacja zmiennoprzecinkowa jest zaufana? –
@AlexandreC .: 'Double.MinValue' jest najprawdopodobniej zdefiniowany jako odpowiadający innym polom' MinValue' w .NET Framework takim jak 'Int32.MinValue',' DateTime.MinValue' itd. To oczywiście nie jest taki sam jak 'DBL_MIN' w C. Zgadzam się jednak, że definicja' Double.Epsilon' jest myląca. –