Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C-sharp language specification.2004.pdf
Скачиваний:
14
Добавлен:
23.08.2013
Размер:
2.55 Mб
Скачать

Chapter 11 Types

111.1.6 Floating point types

2C# supports two floating-point types: float and double. The float and double types are represented

3using the 32-bit single-precision and 64-bit double-precision IEC 60559 formats, which provide the

4following sets of values:

5Positive zero and negative zero. In most situations, positive zero and negative zero behave identically as

6the simple value zero, but certain operations distinguish between the two (§14.7.2).

7Positive infinity and negative infinity. Infinities are produced by such operations as dividing a non-zero

8number by zero. [Example: 1.0 / 0.0 yields positive infinity, and –1.0 / 0.0 yields negative infinity.

9end example]

10The Not-a-Number value, often abbreviated NaN. NaNs are produced by invalid floating-point

11operations, such as dividing zero by zero.

12The finite set of non-zero values of the form s × m × 2e, where s is 1 or −1, and m and e are determined

13by the particular floating-point type: For float, 0 < m < 224 and −149 ≤ e ≤ 104, and for double,

140 < m < 253 and −1075 ≤ e ≤ 970. Denormalized floating-point numbers are considered valid non-zero

15values. C# neither requires nor forbids that a conforming implementation support denormalized floating-

16point numbers.

17The float type can represent values ranging from approximately 1.5 × 10−45 to 3.4 × 1038 with a precision

18of 7 digits.

19The double type can represent values ranging from approximately 5.0 × 10−324 to 1.7 × 10308 with a

20precision of 15–16 digits.

21The floating-point operators, including the assignment operators, never produce exceptions. Instead, in

22exceptional situations, floating-point operations produce zero, infinity, or NaN, as described below:

23The result of a floating-point operation is rounded to the nearest representable value in the destination

24format. This may cause a non-zero value to be rounded to zero.

25If the magnitude of the result of a floating-point operation is too large for the destination format, the

26result of the operation becomes positive infinity or negative infinity.

27If a floating-point operation is invalid, the result of the operation becomes NaN.

28If one or both operands of a floating-point operation is NaN, the result of the operation becomes NaN.

29Floating-point operations can be performed with higher precision than the result type of the operation.

30[Example: Some hardware architectures support an “extended” or “long double” floating-point type with

31greater range and precision than the double type, and implicitly perform all floating-point operations using

32this higher precision type. Only at excessive cost in performance can such hardware architectures be made to

33perform floating-point operations with less precision, and rather than require an implementation to forfeit

34both performance and precision, C# allows a higher precision type to be used for all floating-point

35operations. Other than delivering more precise results, this rarely has any measurable effects. However, in

36expressions of the form x * y / z, where the multiplication produces a result that is outside the double

37range, but the subsequent division brings the temporary result back into the double range, the fact that the

38expression is evaluated in a higher range format can cause a finite result to be produced instead of an

39infinity. end example]

4011.1.7 The decimal type

41The decimal type is a 128-bit data type suitable for financial and monetary calculations. The decimal type

42can represent values including those in the range 1 × 10−28 through 1 × 1028 with at least 28 significant digits.

43The finite set of values of type decimal are of the form (–1)s × c × 10-e, where the sign s is 0 or 1, the

44coefficient c is given by 0 ≤ c <Cmax, and the scale e is such that Emin ≤ e ≤ Emax, where Cmax is at least

451 × 1028, Emin <= 0, and Emax >= 28. The decimal type does not necessarily support signed zeros,

46infinities, or NaN's.

109

Соседние файлы в предмете Электротехника