Osiem dziesiętnych cyfr znaczących w typie float
Ostatnio zmodyfikowano 2018-01-03 07:19
mateczek |
» 2018-01-03 07:19:36 Arytmetyki stałoprzecinkowej nie trzeba nawet emulować, bo to arytmetyka całkowita, tylko wynik jest inaczej interpretowany. |
jak najbardziej racja. Ja tak liczę na niektórych sterownikach plc. i tak w ramach testu program silnia na różnych typach danych : #include <iostream>
using namespace std;
int main() { float liczba = 1; long double liczba2 = 1; long long liczba3 = 1; for( int i = 1; i < 50; i++ ) { liczba *= i; liczba2 *= i; liczba3 *= i; cout << fixed << "f: " << liczba << " ld: " << liczba2 << " ll: " << liczba3 << endl; } } f-float; ld-long double; ll -long long; f: 1.000000 ld: 1.000000 ll: 1 f: 2.000000 ld: 2.000000 ll: 2 f: 6.000000 ld: 6.000000 ll: 6 f: 24.000000 ld: 24.000000 ll: 24 f: 120.000000 ld: 120.000000 ll: 120 f: 720.000000 ld: 720.000000 ll: 720 f: 5040.000000 ld: 5040.000000 ll: 5040 f: 40320.000000 ld: 40320.000000 ll: 40320 f: 362880.000000 ld: 362880.000000 ll: 362880 f: 3628800.000000 ld: 3628800.000000 ll: 3628800 f: 39916800.000000 ld: 39916800.000000 ll: 39916800 f: 479001600.000000 ld: 479001600.000000 ll: 479001600 f: 6227020800.000000 ld: 6227020800.000000 ll: 6227020800 f: 87178289152.000000 ld: 87178291200.000000 ll: 87178291200 //float przybliża ale liczy dalej f: 1307674279936.000000 ld: 1307674368000.000000 ll: 1307674368000 f: 20922788478976.000000 ld: 20922789888000.000000 ll: 20922789888000 f: 355687414628352.000000 ld: 355687428096000.000000 ll: 355687428096000 f: 6402373530419200.000000 ld: 6402373705728000.000000 ll: 6402373705728000 f: 121645096004222976.000000 ld: 121645100408832000.000000 ll: 121645100408832000 f: 2432902023163674624.000000 ld: 2432902008176640000.000000 ll: 2432902008176640000 f: 51090940837169725440.000000 ld: 51090942171709440000.000000 ll: -4249290049419214848 //long long się wysypał przy 20!
|
|
1 « 2 » |