miten Visual Basicissa saa konetarkkuuden luvun (macine precision) double- luvuille ?
... Minkä? Kelpaako tämä? VB6 toimii vain yhdellä alustalla, joten tilanne on kaikille sama.
haluan siis machine epsilon:in
Voit laskea sen tuosta double-tyypin formaatista. 1 / 2^52 on suunnilleen 2.2204460492503131e-16. Voit myös testata asian laskemalla toistuvasti ykkösestä ja saadusta arvauksesta keskiarvon:
Dim e As Double, e2 As Double ' Arvataan aluksi kakkonen e2 = 2 Do ' Laitetaan arvaus e:hen e = e2 ' Lasketaan uusi arvaus e2 = (e + 1) / 2 ' Lopetetaan, kun uusi arvaus pyöristyy samaksi kuin 1 tai edellinen arvaus. Loop Until e2 = e Or e2 = 1
löysin tällaisen
.NET Framework Class Library
Double.Epsilon Field
Represents the smallest positive Double value greater than zero. This field is constant.
Onko VB6.ssa mitään vastaavaa?
Etsitkö nyt vain pienintä mahdollista Double-lukua, vai haluatko saada aikaan sen, että kaksi samat luvut sisältävää kuitenkin eriarvoista Doublea olisivat verrattaessa samanarvoisia?
Lisäksi löysin tämmöisen aiheeseen liittyvän viestinpätkän:
lainaus:
double.Epsilon and float.Epsilon are not the same thing as DBL_EPSILON and FLT_EPSILON in C/C++ (which are defined as smallest positive number x, such that x + 1.0 is not equal to 1.0). In C/C++ these values are 1.192092896e–07F and 2.2204460492503131e–016 respectively. Notice that the exponent in either case is identical or really close the that type's decimal precision (7/7 and 15/16). Single.Epsilon is 1.401298E-45f and Double.Epsilon is 4.94065645841247E-324. Single precision is 7 digits in .NET and Double is 15 digits. 45 decimal places and 324 decimal places is nowhere near the precision of either type in .NET. Epsilon in .NET is defined as the smallest representable positive value; which means it can't be used for near floating-point equality
Aihe on jo aika vanha, joten et voi enää vastata siihen.