SlideShare ist ein Scribd-Unternehmen logo
1 von 136
Downloaden Sie, um offline zu lesen
Поговорим про арифметику
Андрей Акиньшин, JetBrains
DotNext 2016 SPb
1/32
Про что будем разговаривать?
2/32
Упражнение №1
Задача. Что выведет следующий код?
Write(0.1 + 0.2 == 0.3);
3/32
Упражнение №1
Задача. Что выведет следующий код?
Write(0.1 + 0.2 == 0.3);
A true
3/32
Упражнение №1
Задача. Что выведет следующий код?
Write(0.1 + 0.2 == 0.3);
A true
B false
3/32
Упражнение №1
Задача. Что выведет следующий код?
Write(0.1 + 0.2 == 0.3);
A true
B false
C 0.3
3/32
Упражнение №1
Задача. Что выведет следующий код?
Write(0.1 + 0.2 == 0.3);
A true
B false
C 0.3
D ArithmeticException
3/32
Упражнение №1
Задача. Что выведет следующий код?
Write(0.1 + 0.2 == 0.3);
A true
BB false
C 0.3
D ArithmeticException
3/32
[Решение] Упражнение №1
0.1d ≈ 0.100000000000000005551115123125783
4/32
[Решение] Упражнение №1
0.1d ≈ 0.100000000000000005551115123125783
+0.2d ≈ 0.200000000000000011102230246251565
4/32
[Решение] Упражнение №1
0.1d ≈ 0.100000000000000005551115123125783
+0.2d ≈ 0.200000000000000011102230246251565
0.300000000000000044408920985006262
4/32
[Решение] Упражнение №1
0.1d ≈ 0.100000000000000005551115123125783
+0.2d ≈ 0.200000000000000011102230246251565
0.300000000000000044408920985006262
0.3d ≈ 0.299999999999999988897769753748435
4/32
[Решение] Упражнение №1
0.1d ≈ 0.100000000000000005551115123125783
+0.2d ≈ 0.200000000000000011102230246251565
0.300000000000000044408920985006262
0.3d ≈ 0.299999999999999988897769753748435
Вывод:
0.1d + 0.2d = 0.3d
4/32
Упражнение №2
Задача. Что выведет следующий код?
float Sum(float a, float b) => a + b;
float x;
void Main()
{
x = Sum(0.1f, 0.2f);
float y = Sum(0.1f, 0.2f);
Write(x == y);
GC.KeepAlive(y);
}
5/32
Упражнение №2
Задача. Что выведет следующий код?
float Sum(float a, float b) => a + b;
float x;
void Main()
{
x = Sum(0.1f, 0.2f);
float y = Sum(0.1f, 0.2f);
Write(x == y);
GC.KeepAlive(y);
}
A true
5/32
Упражнение №2
Задача. Что выведет следующий код?
float Sum(float a, float b) => a + b;
float x;
void Main()
{
x = Sum(0.1f, 0.2f);
float y = Sum(0.1f, 0.2f);
Write(x == y);
GC.KeepAlive(y);
}
A true
B false
5/32
Упражнение №2
Задача. Что выведет следующий код?
float Sum(float a, float b) => a + b;
float x;
void Main()
{
x = Sum(0.1f, 0.2f);
float y = Sum(0.1f, 0.2f);
Write(x == y);
GC.KeepAlive(y);
}
A true
B false
C ArithmeticException
5/32
Упражнение №2
Задача. Что выведет следующий код?
float Sum(float a, float b) => a + b;
float x;
void Main()
{
x = Sum(0.1f, 0.2f);
float y = Sum(0.1f, 0.2f);
Write(x == y);
GC.KeepAlive(y);
}
A true
B false
C ArithmeticException
D Зависит
5/32
Упражнение №2
Задача. Что выведет следующий код?
float Sum(float a, float b) => a + b;
float x;
void Main()
{
x = Sum(0.1f, 0.2f);
float y = Sum(0.1f, 0.2f);
Write(x == y);
GC.KeepAlive(y);
}
AA true
B false
C ArithmeticException
D Зависит
5/32
Упражнение №3
Задача. Что выведет следующий код?
float Sum(float a, float b) => a + b;
float x;
void Main()
{
x = Sum(0.1f, 0.2f);
float y = Sum(0.1f, 0.2f);
Write(x == y);
// GC.KeepAlive(y);
}
6/32
Упражнение №3
Задача. Что выведет следующий код?
float Sum(float a, float b) => a + b;
float x;
void Main()
{
x = Sum(0.1f, 0.2f);
float y = Sum(0.1f, 0.2f);
Write(x == y);
// GC.KeepAlive(y);
}
A true
6/32
Упражнение №3
Задача. Что выведет следующий код?
float Sum(float a, float b) => a + b;
float x;
void Main()
{
x = Sum(0.1f, 0.2f);
float y = Sum(0.1f, 0.2f);
Write(x == y);
// GC.KeepAlive(y);
}
A true
B false
6/32
Упражнение №3
Задача. Что выведет следующий код?
float Sum(float a, float b) => a + b;
float x;
void Main()
{
x = Sum(0.1f, 0.2f);
float y = Sum(0.1f, 0.2f);
Write(x == y);
// GC.KeepAlive(y);
}
A true
B false
C ArithmeticException
6/32
Упражнение №3
Задача. Что выведет следующий код?
float Sum(float a, float b) => a + b;
float x;
void Main()
{
x = Sum(0.1f, 0.2f);
float y = Sum(0.1f, 0.2f);
Write(x == y);
// GC.KeepAlive(y);
}
A true
B false
C ArithmeticException
D Зависит
6/32
Упражнение №3
Задача. Что выведет следующий код?
float Sum(float a, float b) => a + b;
float x;
void Main()
{
x = Sum(0.1f, 0.2f);
float y = Sum(0.1f, 0.2f);
Write(x == y);
// GC.KeepAlive(y);
}
A true
B false
C ArithmeticException
DD Зависит
6/32
[Решение] Упражнение №3
Ответ.
Debug Release
MS.NET true false
Mono true true
7/32
[Решение] Упражнение №3
Ответ.
Debug Release
MS.NET true false
Mono true true
Объяснение.
ECMA-335, I.12.1.3 “Handling of floating-point data types”
“The nominal type of the variable or expression is either
float32 or float64, but its value can be represented
internally with additional range and/or precision.”
7/32
Упражнение №4
Задача. Умножить 6.2f на 10, результат
вернуть в виде int. Получить 62.
8/32
Упражнение №4
Задача. Умножить 6.2f на 10, результат
вернуть в виде int. Получить 62.
A
int value1 =
(int)(6.2f * 10);
8/32
Упражнение №4
Задача. Умножить 6.2f на 10, результат
вернуть в виде int. Получить 62.
A
int value1 =
(int)(6.2f * 10);
B
float mul = 6.2f * 10;
int value2 = (int)mul;
8/32
Упражнение №4
Задача. Умножить 6.2f на 10, результат
вернуть в виде int. Получить 62.
A
int value1 =
(int)(6.2f * 10);
B
float mul = 6.2f * 10;
int value2 = (int)mul;
C A и B правильные
8/32
Упражнение №4
Задача. Умножить 6.2f на 10, результат
вернуть в виде int. Получить 62.
A
int value1 =
(int)(6.2f * 10);
B
float mul = 6.2f * 10;
int value2 = (int)mul;
C A и B правильные
D A и B неправильные
8/32
Упражнение №4
Задача. Умножить 6.2f на 10, результат
вернуть в виде int. Получить 62.
A
int value1 =
(int)(6.2f * 10);
BB
float mul = 6.2f * 10;
int value2 = (int)mul;
C A и B правильные
D A и B неправильные
8/32
Упражнение №4
Задача. Умножить 6.2f на 10, результат
вернуть в виде int. Получить 62.
A
int value1 =
(int)(6.2f * 10);
BB
float mul = 6.2f * 10;
int value2 = (int)mul;
C A и B правильные
D A и B неправильные
Проверка решения.
mcs 4.2.3
MSBuild/12.0/Bin/csc.exe
Roslyn 1.0.0–1.1.1 Roslyn 1.2.0+
A value1 61 62
B value2 62 62
8/32
[Решение] Упражнение №4
double d = 6.2f * 10d;
// d = 61.9999980926513671875
float f = RoundToFloat(d); // f = 62
int i1 = TruncToInt(d); // i = 61
int i2 = TruncToInt(f); // i = 62
9/32
[Решение] Упражнение №4
double d = 6.2f * 10d;
// d = 61.9999980926513671875
float f = RoundToFloat(d); // f = 62
int i1 = TruncToInt(d); // i = 61
int i2 = TruncToInt(f); // i = 62
int value1 = (int)(6.2f * 10);
// IL_0000: ldc.i4.s 61 or 62 ; int
// IL_0002: stloc.0
9/32
[Решение] Упражнение №4
double d = 6.2f * 10d;
// d = 61.9999980926513671875
float f = RoundToFloat(d); // f = 62
int i1 = TruncToInt(d); // i = 61
int i2 = TruncToInt(f); // i = 62
int value1 = (int)(6.2f * 10);
// IL_0000: ldc.i4.s 61 or 62 ; int
// IL_0002: stloc.0
float mul = 6.2f * 10;
int value2 = (int)mul;
// IL_0003: ldc.r4 62 ; float
// IL_0008: conv.i4
// IL_0009: ldloc.0
9/32
Упражнение №5
Задача. Вычислите следующие величины:
Math.Round(-0.5), Math.Round(-1.5)
10/32
Упражнение №5
Задача. Вычислите следующие величины:
Math.Round(-0.5), Math.Round(-1.5)
A Round(-0.5) = 0
Round(-1.5) = -1
10/32
Упражнение №5
Задача. Вычислите следующие величины:
Math.Round(-0.5), Math.Round(-1.5)
A Round(-0.5) = 0
Round(-1.5) = -1
B Round(-0.5) = -1
Round(-1.5) = -2
10/32
Упражнение №5
Задача. Вычислите следующие величины:
Math.Round(-0.5), Math.Round(-1.5)
A Round(-0.5) = 0
Round(-1.5) = -1
B Round(-0.5) = -1
Round(-1.5) = -2
C Round(-0.5) = 0
Round(-1.5) = -2
10/32
Упражнение №5
Задача. Вычислите следующие величины:
Math.Round(-0.5), Math.Round(-1.5)
A Round(-0.5) = 0
Round(-1.5) = -1
B Round(-0.5) = -1
Round(-1.5) = -2
C Round(-0.5) = 0
Round(-1.5) = -2
D Round(-0.5) = -1
Round(-1.5) = -1
10/32
Упражнение №5
Задача. Вычислите следующие величины:
Math.Round(-0.5), Math.Round(-1.5)
A Round(-0.5) = 0
Round(-1.5) = -1
B Round(-0.5) = -1
Round(-1.5) = -2
CC Round(-0.5) = 0
Round(-1.5) = -2
D Round(-0.5) = -1
Round(-1.5) = -1
10/32
[Решение] Упражнение №5
enum MidpointRounding {
AwayFromZero, // Прочь от нуля
ToEven // К ближайшему чётному
}
11/32
[Решение] Упражнение №5
enum MidpointRounding {
AwayFromZero, // Прочь от нуля
ToEven // К ближайшему чётному
}
static double Round(
double value,
MidpointRounding mode
)
static double Round(
double value
) // mode = ToEven
11/32
[Решение] Упражнение №5
enum MidpointRounding {
AwayFromZero, // Прочь от нуля
ToEven // К ближайшему чётному
}
static double Round(
double value,
MidpointRounding mode
)
static double Round(
double value
) // mode = ToEven
Round(-0.5) = 0
Round(-1.5) = -2
11/32
Упражнение №6
Задача. Что выведет следующий код?
int x = 2147483584;
Write((int)(float)x);
12/32
Упражнение №6
Задача. Что выведет следующий код?
int x = 2147483584;
Write((int)(float)x);
A 2147483584
12/32
Упражнение №6
Задача. Что выведет следующий код?
int x = 2147483584;
Write((int)(float)x);
A 2147483584
B 2147483647 (int.MaxValue)
12/32
Упражнение №6
Задача. Что выведет следующий код?
int x = 2147483584;
Write((int)(float)x);
A 2147483584
B 2147483647 (int.MaxValue)
C -2147483648 (int.MinValue)
12/32
Упражнение №6
Задача. Что выведет следующий код?
int x = 2147483584;
Write((int)(float)x);
A 2147483584
B 2147483647 (int.MaxValue)
C -2147483648 (int.MinValue)
D OverflowException
12/32
Упражнение №6
Задача. Что выведет следующий код?
int x = 2147483584;
Write((int)(float)x);
A 2147483584
B 2147483647 (int.MaxValue)
CC -2147483648 (int.MinValue)
DD OverflowException
12/32
[Решение] Упражнение №6
unchecked { Write((int)(float)x); }
⇓
x = 2147483584
(float)x = 2147483648 = +231
(int)(float)x = -2147483648 = −231
13/32
[Решение] Упражнение №6
unchecked { Write((int)(float)x); }
⇓
x = 2147483584
(float)x = 2147483648 = +231
(int)(float)x = -2147483648 = −231
checked { Write((int)(float)x); }
⇓
OverflowException
13/32
Упражнение №7
Задача. Что выведет следующий код?
Write(1 << 32);
14/32
Упражнение №7
Задача. Что выведет следующий код?
Write(1 << 32);
A 0
14/32
Упражнение №7
Задача. Что выведет следующий код?
Write(1 << 32);
A 0
B 1
14/32
Упражнение №7
Задача. Что выведет следующий код?
Write(1 << 32);
A 0
B 1
C -2147483648 (int.MinValue)
14/32
Упражнение №7
Задача. Что выведет следующий код?
Write(1 << 32);
A 0
B 1
C -2147483648 (int.MinValue)
D OverflowException
14/32
Упражнение №7
Задача. Что выведет следующий код?
Write(1 << 32);
A 0
BB 1
C -2147483648 (int.MinValue)
D OverflowException
14/32
Упражнение №7
Задача. Что выведет следующий код?
Write(1 << 32);
A 0
BB 1
C -2147483648 (int.MinValue)
D OverflowException
ECMA-334, 14.8 “Shift operators”
“When the type of x is int or uint, the shift count is
given by the low-order five bits of count.”
int x: (x 0) = (x 32) = (x 64) = . . .
long x: (x 0) = (x 64) = (x 128) = . . .
14/32
Упражнение №8
Задача. Выпишите таблицу истинности для
следующих nullable-операций:
Write(false | null); Write(true | null);
Write(false & null); Write(true & null);
Write(false ^ null); Write(true ^ null);
15/32
Упражнение №8
Задача. Выпишите таблицу истинности для
следующих nullable-операций:
Write(false | null); Write(true | null);
Write(false & null); Write(true & null);
Write(false ^ null); Write(true ^ null);
A Код не скомпилируется
15/32
Упражнение №8
Задача. Выпишите таблицу истинности для
следующих nullable-операций:
Write(false | null); Write(true | null);
Write(false & null); Write(true & null);
Write(false ^ null); Write(true ^ null);
A Код не скомпилируется
B Все выражения вернут null
15/32
Упражнение №8
Задача. Выпишите таблицу истинности для
следующих nullable-операций:
Write(false | null); Write(true | null);
Write(false & null); Write(true & null);
Write(false ^ null); Write(true ^ null);
A Код не скомпилируется
B Все выражения вернут null
C ArithmeticException
15/32
Упражнение №8
Задача. Выпишите таблицу истинности для
следующих nullable-операций:
Write(false | null); Write(true | null);
Write(false & null); Write(true & null);
Write(false ^ null); Write(true ^ null);
A Код не скомпилируется
B Все выражения вернут null
C ArithmeticException
D Другое
15/32
Упражнение №8
Задача. Выпишите таблицу истинности для
следующих nullable-операций:
Write(false | null); Write(true | null);
Write(false & null); Write(true & null);
Write(false ^ null); Write(true ^ null);
A Код не скомпилируется
B Все выражения вернут null
C ArithmeticException
DD Другое
15/32
[Решение] Упражнение №8
ECMA-334, 14.10.4 “The bool? logical operators”
В стандарте приводятся таблицы,
из которых явно следует:
| null & null ^ null
false null false null
true true null null
16/32
Упражнение №9
Задача. Найдите такое x, для которого функция
Check вернёт false.
bool Check(double x) => x == x;
17/32
Упражнение №9
Задача. Найдите такое x, для которого функция
Check вернёт false.
bool Check(double x) => x == x;
A x (Нет такого x)
17/32
Упражнение №9
Задача. Найдите такое x, для которого функция
Check вернёт false.
bool Check(double x) => x == x;
A x (Нет такого x)
B x = +∞ (double.PositiveInfinity)
17/32
Упражнение №9
Задача. Найдите такое x, для которого функция
Check вернёт false.
bool Check(double x) => x == x;
A x (Нет такого x)
B x = +∞ (double.PositiveInfinity)
C x = −∞ (double.NegativeInfinity)
17/32
Упражнение №9
Задача. Найдите такое x, для которого функция
Check вернёт false.
bool Check(double x) => x == x;
A x (Нет такого x)
B x = +∞ (double.PositiveInfinity)
C x = −∞ (double.NegativeInfinity)
D x /∈ R (double.NaN)
17/32
Упражнение №9
Задача. Найдите такое x, для которого функция
Check вернёт false.
bool Check(double x) => x == x;
A x (Нет такого x)
B x = +∞ (double.PositiveInfinity)
C x = −∞ (double.NegativeInfinity)
DD x /∈ R (double.NaN)
17/32
Упражнение №9
Задача. Найдите такое x, для которого функция
Check вернёт false.
bool Check(double x) => x == x;
A x (Нет такого x)
B x = +∞ (double.PositiveInfinity)
C x = −∞ (double.NegativeInfinity)
DD x /∈ R (double.NaN)
ECMA-334, 14.9.2 “Floating-point comparison operators”
If either operand is NaN, the result is false for all
operators except !=, for which the result is true.
17/32
Упражнение №10
Задача. Что выведет следующий код?
double x = double.NaN;
Write(x == 1.0);
18/32
Упражнение №10
Задача. Что выведет следующий код?
double x = double.NaN;
Write(x == 1.0);
A false
18/32
Упражнение №10
Задача. Что выведет следующий код?
double x = double.NaN;
Write(x == 1.0);
A false
B true
18/32
Упражнение №10
Задача. Что выведет следующий код?
double x = double.NaN;
Write(x == 1.0);
A false
B true
C double.NaN
18/32
Упражнение №10
Задача. Что выведет следующий код?
double x = double.NaN;
Write(x == 1.0);
A false
B true
C double.NaN
D OverflowException
18/32
Упражнение №10
Задача. Что выведет следующий код?
double x = double.NaN;
Write(x == 1.0);
AA false
B true
C double.NaN
DD OverflowException
18/32
[Решение] Упражнение №10
.NET 027F 0000 0010 0111 1111
Delphi 1272 0001 0010 0111 0010
19/32
Упражнение №11
Задача. Найдите такое x для которого функции
Negate1 и Negate2 вернут разные значения.
string Binary(double x) => string.Format(
"{0:X16}",
BitConverter.DoubleToInt64Bits(x));
string Negate1(double x) => Binary( -x);
string Negate2(double x) => Binary(0-x);
20/32
Упражнение №11
Задача. Найдите такое x для которого функции
Negate1 и Negate2 вернут разные значения.
string Binary(double x) => string.Format(
"{0:X16}",
BitConverter.DoubleToInt64Bits(x));
string Negate1(double x) => Binary( -x);
string Negate2(double x) => Binary(0-x);
A x (Нет такого x)
20/32
Упражнение №11
Задача. Найдите такое x для которого функции
Negate1 и Negate2 вернут разные значения.
string Binary(double x) => string.Format(
"{0:X16}",
BitConverter.DoubleToInt64Bits(x));
string Negate1(double x) => Binary( -x);
string Negate2(double x) => Binary(0-x);
A x (Нет такого x)
B 0 (0)
20/32
Упражнение №11
Задача. Найдите такое x для которого функции
Negate1 и Negate2 вернут разные значения.
string Binary(double x) => string.Format(
"{0:X16}",
BitConverter.DoubleToInt64Bits(x));
string Negate1(double x) => Binary( -x);
string Negate2(double x) => Binary(0-x);
A x (Нет такого x)
B 0 (0)
C x /∈ R (double.NaN)
20/32
Упражнение №11
Задача. Найдите такое x для которого функции
Negate1 и Negate2 вернут разные значения.
string Binary(double x) => string.Format(
"{0:X16}",
BitConverter.DoubleToInt64Bits(x));
string Negate1(double x) => Binary( -x);
string Negate2(double x) => Binary(0-x);
A x (Нет такого x)
B 0 (0)
C x /∈ R (double.NaN)
D x ≈ 1.79769 · 10308
(double.MaxValue)
20/32
Упражнение №11
Задача. Найдите такое x для которого функции
Negate1 и Negate2 вернут разные значения.
string Binary(double x) => string.Format(
"{0:X16}",
BitConverter.DoubleToInt64Bits(x));
string Negate1(double x) => Binary( -x);
string Negate2(double x) => Binary(0-x);
A x (Нет такого x)
BB 0 (0)
CC x /∈ R (double.NaN)
D x ≈ 1.79769 · 10308
(double.MaxValue)
20/32
[Решение] Упражнение №11
string Negate1(double x) => Binary( -x);
string Negate2(double x) => Binary(0-x);
21/32
[Решение] Упражнение №11
string Negate1(double x) => Binary( -x);
string Negate2(double x) => Binary(0-x);
Binary(0) == "0000000000000000" // +0.0
Negate1(0) == "8000000000000000" // -0.0
Negate2(0) == "0000000000000000" // +0.0
21/32
[Решение] Упражнение №11
string Negate1(double x) => Binary( -x);
string Negate2(double x) => Binary(0-x);
Binary(0) == "0000000000000000" // +0.0
Negate1(0) == "8000000000000000" // -0.0
Negate2(0) == "0000000000000000" // +0.0
Binary(double.NaN) == "FFF8000000000000"
Negate1(double.NaN) == "7FF8000000000000"
Negate2(double.NaN) == "FFF8000000000000"
21/32
Упражнение №12
Задача. Что выведет следующий код?
struct DoubleInt {
public double X;
public int Y;
}
var a = new DoubleInt { X = +0.0 };
var b = new DoubleInt { X = -0.0 };
Write(a.Equals(b));
22/32
Упражнение №12
Задача. Что выведет следующий код?
struct DoubleInt {
public double X;
public int Y;
}
var a = new DoubleInt { X = +0.0 };
var b = new DoubleInt { X = -0.0 };
Write(a.Equals(b));
A true
22/32
Упражнение №12
Задача. Что выведет следующий код?
struct DoubleInt {
public double X;
public int Y;
}
var a = new DoubleInt { X = +0.0 };
var b = new DoubleInt { X = -0.0 };
Write(a.Equals(b));
A true
B false
22/32
Упражнение №12
Задача. Что выведет следующий код?
struct DoubleInt {
public double X;
public int Y;
}
var a = new DoubleInt { X = +0.0 };
var b = new DoubleInt { X = -0.0 };
Write(a.Equals(b));
A true
B false
C double.NaN
22/32
Упражнение №12
Задача. Что выведет следующий код?
struct DoubleInt {
public double X;
public int Y;
}
var a = new DoubleInt { X = +0.0 };
var b = new DoubleInt { X = -0.0 };
Write(a.Equals(b));
A true
B false
C double.NaN
D Зависит
22/32
Упражнение №12
Задача. Что выведет следующий код?
struct DoubleInt {
public double X;
public int Y;
}
var a = new DoubleInt { X = +0.0 };
var b = new DoubleInt { X = -0.0 };
Write(a.Equals(b));
AA true
B false
C double.NaN
D Зависит
22/32
Упражнение №13
Задача. Что выведет следующий код?
struct DoubleDouble {
public double X;
public double Y;
}
var a = new DoubleDouble { X = +0.0 };
var b = new DoubleDouble { X = -0.0 };
Write(a.Equals(b));
23/32
Упражнение №13
Задача. Что выведет следующий код?
struct DoubleDouble {
public double X;
public double Y;
}
var a = new DoubleDouble { X = +0.0 };
var b = new DoubleDouble { X = -0.0 };
Write(a.Equals(b));
A true
23/32
Упражнение №13
Задача. Что выведет следующий код?
struct DoubleDouble {
public double X;
public double Y;
}
var a = new DoubleDouble { X = +0.0 };
var b = new DoubleDouble { X = -0.0 };
Write(a.Equals(b));
A true
B false
23/32
Упражнение №13
Задача. Что выведет следующий код?
struct DoubleDouble {
public double X;
public double Y;
}
var a = new DoubleDouble { X = +0.0 };
var b = new DoubleDouble { X = -0.0 };
Write(a.Equals(b));
A true
B false
C double.NaN
23/32
Упражнение №13
Задача. Что выведет следующий код?
struct DoubleDouble {
public double X;
public double Y;
}
var a = new DoubleDouble { X = +0.0 };
var b = new DoubleDouble { X = -0.0 };
Write(a.Equals(b));
A true
B false
C double.NaN
D Зависит
23/32
Упражнение №13
Задача. Что выведет следующий код?
struct DoubleDouble {
public double X;
public double Y;
}
var a = new DoubleDouble { X = +0.0 };
var b = new DoubleDouble { X = -0.0 };
Write(a.Equals(b));
A true
B false
C double.NaN
DD Зависит
23/32
[Решение] Упражнение №13
DoubleInt DoubleDouble
MS.NET true false
Mono true true
24/32
[Решение] Упражнение №13
DoubleInt DoubleDouble
MS.NET true false
Mono true true
// MS.NET
class ValueType {
bool Equals (Object obj) {
// ...
if (CanCompareBits(this))
return FastEqualsCheck(thisObj, obj);
// ...
}
// Проверяем, что структура "tightly packed"
static extern bool CanCompareBits(Object obj);
}
24/32
Упражнение №14
Задача. Найдите три таких числа a, b, c типа
double (не равных double.NaN), чтобы для них
выполнилось нижеприведённое неравенство.
(a + b) + c = a + (b + c)
25/32
Упражнение №14
Задача. Найдите три таких числа a, b, c типа
double (не равных double.NaN), чтобы для них
выполнилось нижеприведённое неравенство.
(a + b) + c = a + (b + c)
A (a, b, c) (Нет таких чисел)
25/32
Упражнение №14
Задача. Найдите три таких числа a, b, c типа
double (не равных double.NaN), чтобы для них
выполнилось нижеприведённое неравенство.
(a + b) + c = a + (b + c)
A (a, b, c) (Нет таких чисел)
B a = 10100
, b = 10100
, c = 1
25/32
Упражнение №14
Задача. Найдите три таких числа a, b, c типа
double (не равных double.NaN), чтобы для них
выполнилось нижеприведённое неравенство.
(a + b) + c = a + (b + c)
A (a, b, c) (Нет таких чисел)
B a = 10100
, b = 10100
, c = 1
C a = 10100
, b = −10100
, c = 1
25/32
Упражнение №14
Задача. Найдите три таких числа a, b, c типа
double (не равных double.NaN), чтобы для них
выполнилось нижеприведённое неравенство.
(a + b) + c = a + (b + c)
A (a, b, c) (Нет таких чисел)
B a = 10100
, b = 10100
, c = 1
C a = 10100
, b = −10100
, c = 1
D a = 10100
, b = 10−100
, c = 1
25/32
Упражнение №14
Задача. Найдите три таких числа a, b, c типа
double (не равных double.NaN), чтобы для них
выполнилось нижеприведённое неравенство.
(a + b) + c = a + (b + c)
A (a, b, c) (Нет таких чисел)
B a = 10100
, b = 10100
, c = 1
CC a = 10100
, b = −10100
, c = 1
D a = 10100
, b = 10−100
, c = 1
25/32
[Решение] Упражнение №14
double a = 1e100, b = -1e100, c = 1;
26/32
[Решение] Упражнение №14
double a = 1e100, b = -1e100, c = 1;
(a + b) + c = (10100
− 10100
) + 1 = 0 + 1 = 1
26/32
[Решение] Упражнение №14
double a = 1e100, b = -1e100, c = 1;
(a + b) + c = (10100
− 10100
) + 1 = 0 + 1 = 1
a+(b+c) = 10100
+(−10100
+1) = 10100
−10100
= 0
26/32
Упражнение №15
Задача. Что выведет следующий код?1
Write("{0:N30}", 24m * 22m / 24m);
1
Постфикс m означает тип decimal
27/32
Упражнение №15
Задача. Что выведет следующий код?1
Write("{0:N30}", 24m * 22m / 24m);
A 22.000000000000000000000000000000
1
Постфикс m означает тип decimal
27/32
Упражнение №15
Задача. Что выведет следующий код?1
Write("{0:N30}", 24m * 22m / 24m);
A 22.000000000000000000000000000000
B 22.000000000000000000000000001000
1
Постфикс m означает тип decimal
27/32
Упражнение №15
Задача. Что выведет следующий код?1
Write("{0:N30}", 24m * 22m / 24m);
A 22.000000000000000000000000000000
B 22.000000000000000000000000001000
C 24.000000000000000000000000000000
1
Постфикс m означает тип decimal
27/32
Упражнение №15
Задача. Что выведет следующий код?1
Write("{0:N30}", 24m * 22m / 24m);
A 22.000000000000000000000000000000
B 22.000000000000000000000000001000
C 24.000000000000000000000000000000
D OverflowException
1
Постфикс m означает тип decimal
27/32
Упражнение №15
Задача. Что выведет следующий код?1
Write("{0:N30}", 24m * 22m / 24m);
AA 22.000000000000000000000000000000
B 22.000000000000000000000000001000
C 24.000000000000000000000000000000
D OverflowException
24 · 22
24
=
24 · 22
24
= 22
1
Постфикс m означает тип decimal
27/32
Упражнение №16
Задача. Что выведет следующий код?
Write({0:N30}, 24m * (22m / 24m));
28/32
Упражнение №16
Задача. Что выведет следующий код?
Write({0:N30}, 24m * (22m / 24m));
A 22.000000000000000000000000000000
28/32
Упражнение №16
Задача. Что выведет следующий код?
Write({0:N30}, 24m * (22m / 24m));
A 22.000000000000000000000000000000
B 22.000000000000000000000000001000
28/32
Упражнение №16
Задача. Что выведет следующий код?
Write({0:N30}, 24m * (22m / 24m));
A 22.000000000000000000000000000000
B 22.000000000000000000000000001000
C 24.000000000000000000000000000000
28/32
Упражнение №16
Задача. Что выведет следующий код?
Write({0:N30}, 24m * (22m / 24m));
A 22.000000000000000000000000000000
B 22.000000000000000000000000001000
C 24.000000000000000000000000000000
D OverflowException
28/32
Упражнение №16
Задача. Что выведет следующий код?
Write({0:N30}, 24m * (22m / 24m));
A 22.000000000000000000000000000000
BB 22.000000000000000000000000001000
C 24.000000000000000000000000000000
D OverflowException
28/32
Упражнение №17
Задача. Что выведет следующий код?
var x = 1.0m;
var y = 1.00m;
Write(x == y);
Write(x.ToString() == y.ToString());
29/32
Упражнение №17
Задача. Что выведет следующий код?
var x = 1.0m;
var y = 1.00m;
Write(x == y);
Write(x.ToString() == y.ToString());
A
true
true
29/32
Упражнение №17
Задача. Что выведет следующий код?
var x = 1.0m;
var y = 1.00m;
Write(x == y);
Write(x.ToString() == y.ToString());
A
true
true
B
false
false
29/32
Упражнение №17
Задача. Что выведет следующий код?
var x = 1.0m;
var y = 1.00m;
Write(x == y);
Write(x.ToString() == y.ToString());
A
true
true
B
false
false
C
true
false
29/32
Упражнение №17
Задача. Что выведет следующий код?
var x = 1.0m;
var y = 1.00m;
Write(x == y);
Write(x.ToString() == y.ToString());
A
true
true
B
false
false
C
true
false
D
false
true
29/32
Упражнение №17
Задача. Что выведет следующий код?
var x = 1.0m;
var y = 1.00m;
Write(x == y);
Write(x.ToString() == y.ToString());
A
true
true
B
false
false
CC
true
false
D
false
true
29/32
Упражнение №17
Задача. Что выведет следующий код?
var x = 1.0m;
var y = 1.00m;
Write(x == y);
Write(x.ToString() == y.ToString());
A
true
true
B
false
false
CC
true
false
D
false
true
Объяснение.
Write(x.ToString()); // 1.0
Write(y.ToString()); // 1.00
29/32
Упражнение №18*
Задача. Вычислить значение интеграла1
:
1
−1
1
x
1 + x
1 − x
ln
2 x2
+ 2 x + 1
2 x2 − 2 x + 1
dx.
A 2π · arccot
√
φ
B 4π · arccot
√
φ
C eiπ
− 1
D 42
1
Cм. http://math.stackexchange.com/q/562694/
30/32
Методическая литература
31/32
Вопросы?
Андрей Акиньшин, JetBrains
http://aakinshin.net
https://github.com/AndreyAkinshin
https://twitter.com/andrey_akinshin
andrey.akinshin@gmail.com
32/32

Weitere ähnliche Inhalte

Was ist angesagt?

Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMДмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMSergey Platonov
 
Лекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksMikhail Kurnosov
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
 
Распространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийMikhail Shcherbakov
 
хитрости выведения типов
хитрости выведения типовхитрости выведения типов
хитрости выведения типовcorehard_by
 
Антон Полухин, Немного о Boost
Антон Полухин, Немного о BoostАнтон Полухин, Немного о Boost
Антон Полухин, Немного о BoostSergey Platonov
 
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияДракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияPlatonov Sergey
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3Eugeniy Tyumentcev
 
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Platonov Sergey
 
разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2Eugeniy Tyumentcev
 
Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Mikhail Kurnosov
 
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksЛекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksMikhail Kurnosov
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Mikhail Kurnosov
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Mikhail Kurnosov
 
Догнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castДогнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castRoman Orlov
 
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.Roman Orlov
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
 
Введение в разработку многопоточных приложений
Введение в разработку многопоточных приложенийВведение в разработку многопоточных приложений
Введение в разработку многопоточных приложенийCUSTIS
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 

Was ist angesagt? (19)

Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMДмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
 
Лекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building Blocks
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
 
Распространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложений
 
хитрости выведения типов
хитрости выведения типовхитрости выведения типов
хитрости выведения типов
 
Антон Полухин, Немного о Boost
Антон Полухин, Немного о BoostАнтон Полухин, Немного о Boost
Антон Полухин, Немного о Boost
 
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияДракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
 
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
 
разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2
 
Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)
 
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksЛекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)
 
Догнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castДогнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_cast
 
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
 
Введение в разработку многопоточных приложений
Введение в разработку многопоточных приложенийВведение в разработку многопоточных приложений
Введение в разработку многопоточных приложений
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 

Andere mochten auch

Нейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
Нейронечёткая классификация слабо формализуемых данных | Тимур ГильмуллинНейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
Нейронечёткая классификация слабо формализуемых данных | Тимур ГильмуллинPositive Hack Days
 
отзыв ркн по Bitcoininfo.ru
отзыв ркн по Bitcoininfo.ruотзыв ркн по Bitcoininfo.ru
отзыв ркн по Bitcoininfo.ruSarkis Darbinyan
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Ontico
 
Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...
Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...
Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...Ontico
 
TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma Badoo Development
 
TechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, ErlyvideoTechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, ErlyvideoBadoo Development
 
Регулярные выражения C++
Регулярные выражения C++Регулярные выражения C++
Регулярные выражения C++Dmitry Bulgakov
 
Презентация для соискателей о бирже дистанционной работы Crossover
Презентация для соискателей о бирже дистанционной работы Crossover Презентация для соискателей о бирже дистанционной работы Crossover
Презентация для соискателей о бирже дистанционной работы Crossover Petr Tarasevich-Nikolaev
 
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...AvitoTech
 
Вадим Дробинин. Защищаем себя и пользователей: руководство по безопасности
Вадим Дробинин. Защищаем себя и пользователей: руководство по безопасностиВадим Дробинин. Защищаем себя и пользователей: руководство по безопасности
Вадим Дробинин. Защищаем себя и пользователей: руководство по безопасностиAvitoTech
 
Андрей Юткин. Media Picker — to infinity and beyond
Андрей Юткин. Media Picker — to infinity and beyondАндрей Юткин. Media Picker — to infinity and beyond
Андрей Юткин. Media Picker — to infinity and beyondAvitoTech
 
TechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, BadooTechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, BadooBadoo Development
 
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ruTechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ruBadoo Development
 
Александр Пономарев — Разработка приложения под Cocaine — быстро, просто, удобно
Александр Пономарев — Разработка приложения под Cocaine — быстро, просто, удобноАлександр Пономарев — Разработка приложения под Cocaine — быстро, просто, удобно
Александр Пономарев — Разработка приложения под Cocaine — быстро, просто, удобноYandex
 
Страуструп - Язык программирования C++
Страуструп - Язык программирования C++Страуструп - Язык программирования C++
Страуструп - Язык программирования C++Alexey Miasoedov
 
Загрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитикиЗагрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитикиBadoo Development
 
Презентация для соискателей
Презентация для соискателейПрезентация для соискателей
Презентация для соискателейEkaterina Artyugina
 
Programma convengo li psi m 4-5-6 novembre 2016
Programma convengo li psi m 4-5-6 novembre 2016Programma convengo li psi m 4-5-6 novembre 2016
Programma convengo li psi m 4-5-6 novembre 2016Raffaele Barone
 
Никита Шляхов. Учёт времени разработчиков
Никита Шляхов. Учёт времени разработчиковНикита Шляхов. Учёт времени разработчиков
Никита Шляхов. Учёт времени разработчиковSvetlana Gulyaeva
 

Andere mochten auch (20)

Нейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
Нейронечёткая классификация слабо формализуемых данных | Тимур ГильмуллинНейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
Нейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
 
отзыв ркн по Bitcoininfo.ru
отзыв ркн по Bitcoininfo.ruотзыв ркн по Bitcoininfo.ru
отзыв ркн по Bitcoininfo.ru
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
 
Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...
Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...
Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...
 
TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma
 
TechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, ErlyvideoTechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, Erlyvideo
 
Регулярные выражения C++
Регулярные выражения C++Регулярные выражения C++
Регулярные выражения C++
 
Презентация для соискателей о бирже дистанционной работы Crossover
Презентация для соискателей о бирже дистанционной работы Crossover Презентация для соискателей о бирже дистанционной работы Crossover
Презентация для соискателей о бирже дистанционной работы Crossover
 
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...
 
Вадим Дробинин. Защищаем себя и пользователей: руководство по безопасности
Вадим Дробинин. Защищаем себя и пользователей: руководство по безопасностиВадим Дробинин. Защищаем себя и пользователей: руководство по безопасности
Вадим Дробинин. Защищаем себя и пользователей: руководство по безопасности
 
Андрей Юткин. Media Picker — to infinity and beyond
Андрей Юткин. Media Picker — to infinity and beyondАндрей Юткин. Media Picker — to infinity and beyond
Андрей Юткин. Media Picker — to infinity and beyond
 
TechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, BadooTechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, Badoo
 
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ruTechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
 
Александр Пономарев — Разработка приложения под Cocaine — быстро, просто, удобно
Александр Пономарев — Разработка приложения под Cocaine — быстро, просто, удобноАлександр Пономарев — Разработка приложения под Cocaine — быстро, просто, удобно
Александр Пономарев — Разработка приложения под Cocaine — быстро, просто, удобно
 
Страуструп - Язык программирования C++
Страуструп - Язык программирования C++Страуструп - Язык программирования C++
Страуструп - Язык программирования C++
 
Загрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитикиЗагрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитики
 
Remote worker's gross vs net salary
Remote worker's gross vs net salaryRemote worker's gross vs net salary
Remote worker's gross vs net salary
 
Презентация для соискателей
Презентация для соискателейПрезентация для соискателей
Презентация для соискателей
 
Programma convengo li psi m 4-5-6 novembre 2016
Programma convengo li psi m 4-5-6 novembre 2016Programma convengo li psi m 4-5-6 novembre 2016
Programma convengo li psi m 4-5-6 novembre 2016
 
Никита Шляхов. Учёт времени разработчиков
Никита Шляхов. Учёт времени разработчиковНикита Шляхов. Учёт времени разработчиков
Никита Шляхов. Учёт времени разработчиков
 

Ähnlich wie Поговорим про арифметику

Аскетичная разработка браузера
Аскетичная разработка браузераАскетичная разработка браузера
Аскетичная разработка браузераPlatonov Sergey
 
2.2 Стек вызовов
2.2 Стек вызовов2.2 Стек вызовов
2.2 Стек вызововDEVTYPE
 
Extended High-Level C-Compatible Memory Model with Limited Low-Level Pointer ...
Extended High-Level C-Compatible Memory Model with Limited Low-Level Pointer ...Extended High-Level C-Compatible Memory Model with Limited Low-Level Pointer ...
Extended High-Level C-Compatible Memory Model with Limited Low-Level Pointer ...Iosif Itkin
 
Распространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийAndrey Akinshin
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.sharikdp
 
статический анализ кода
статический анализ кодастатический анализ кода
статический анализ кодаAndrey Karpov
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода Pavel Tsukanov
 
Оптимизация в мире 64-битных ошибок
Оптимизация  в мире 64-битных ошибокОптимизация  в мире 64-битных ошибок
Оптимизация в мире 64-битных ошибокTatyanazaxarova
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonovComputer Science Club
 
functional patterns - dotnetconf'11
functional patterns - dotnetconf'11functional patterns - dotnetconf'11
functional patterns - dotnetconf'110xffAA
 
Сложные условия в паскале
Сложные условия в паскалеСложные условия в паскале
Сложные условия в паскалеDaria Romanova
 
По колено в Си++ г... коде
По колено в Си++ г... кодеПо колено в Си++ г... коде
По колено в Си++ г... кодеTatyanazaxarova
 
Flink CEP и немного магии...
Flink CEP и немного магии...Flink CEP и немного магии...
Flink CEP и немного магии...Alexander Chermenin
 
D-кучи и их применение
D-кучи и их применениеD-кучи и их применение
D-кучи и их применениеDEVTYPE
 
тема 2.операторы.линейный алгоритм
тема 2.операторы.линейный алгоритмтема 2.операторы.линейный алгоритм
тема 2.операторы.линейный алгоритмdasha2012
 
Введение в синтаксис C++, часть 2
Введение в синтаксис C++, часть 2Введение в синтаксис C++, часть 2
Введение в синтаксис C++, часть 2DEVTYPE
 
Введение в синтаксис C++, часть 1
Введение в синтаксис C++, часть 1Введение в синтаксис C++, часть 1
Введение в синтаксис C++, часть 1DEVTYPE
 

Ähnlich wie Поговорим про арифметику (20)

Аскетичная разработка браузера
Аскетичная разработка браузераАскетичная разработка браузера
Аскетичная разработка браузера
 
Step cpp022
Step cpp022Step cpp022
Step cpp022
 
2.2 Стек вызовов
2.2 Стек вызовов2.2 Стек вызовов
2.2 Стек вызовов
 
C++ exceptions
C++ exceptionsC++ exceptions
C++ exceptions
 
Extended High-Level C-Compatible Memory Model with Limited Low-Level Pointer ...
Extended High-Level C-Compatible Memory Model with Limited Low-Level Pointer ...Extended High-Level C-Compatible Memory Model with Limited Low-Level Pointer ...
Extended High-Level C-Compatible Memory Model with Limited Low-Level Pointer ...
 
Распространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложений
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.
 
статический анализ кода
статический анализ кодастатический анализ кода
статический анализ кода
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода
 
Оптимизация в мире 64-битных ошибок
Оптимизация  в мире 64-битных ошибокОптимизация  в мире 64-битных ошибок
Оптимизация в мире 64-битных ошибок
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
functional patterns - dotnetconf'11
functional patterns - dotnetconf'11functional patterns - dotnetconf'11
functional patterns - dotnetconf'11
 
Сложные условия в паскале
Сложные условия в паскалеСложные условия в паскале
Сложные условия в паскале
 
По колено в Си++ г... коде
По колено в Си++ г... кодеПо колено в Си++ г... коде
По колено в Си++ г... коде
 
команда присваивания
команда присваиваниякоманда присваивания
команда присваивания
 
Flink CEP и немного магии...
Flink CEP и немного магии...Flink CEP и немного магии...
Flink CEP и немного магии...
 
D-кучи и их применение
D-кучи и их применениеD-кучи и их применение
D-кучи и их применение
 
тема 2.операторы.линейный алгоритм
тема 2.операторы.линейный алгоритмтема 2.операторы.линейный алгоритм
тема 2.операторы.линейный алгоритм
 
Введение в синтаксис C++, часть 2
Введение в синтаксис C++, часть 2Введение в синтаксис C++, часть 2
Введение в синтаксис C++, часть 2
 
Введение в синтаксис C++, часть 1
Введение в синтаксис C++, часть 1Введение в синтаксис C++, часть 1
Введение в синтаксис C++, часть 1
 

Mehr von Andrey Akinshin

Поговорим про performance-тестирование
Поговорим про performance-тестированиеПоговорим про performance-тестирование
Поговорим про performance-тестированиеAndrey Akinshin
 
Сложности performance-тестирования
Сложности performance-тестированияСложности performance-тестирования
Сложности performance-тестированияAndrey Akinshin
 
Поговорим про память
Поговорим про памятьПоговорим про память
Поговорим про памятьAndrey Akinshin
 
Кроссплатформенный .NET и как там дела с Mono и CoreCLR
Кроссплатформенный .NET и как там дела с Mono и CoreCLRКроссплатформенный .NET и как там дела с Mono и CoreCLR
Кроссплатформенный .NET и как там дела с Mono и CoreCLRAndrey Akinshin
 
Теория и практика .NET-бенчмаркинга (25.01.2017, Москва)
 Теория и практика .NET-бенчмаркинга (25.01.2017, Москва) Теория и практика .NET-бенчмаркинга (25.01.2017, Москва)
Теория и практика .NET-бенчмаркинга (25.01.2017, Москва)Andrey Akinshin
 
Let’s talk about microbenchmarking
Let’s talk about microbenchmarkingLet’s talk about microbenchmarking
Let’s talk about microbenchmarkingAndrey Akinshin
 
Теория и практика .NET-бенчмаркинга (02.11.2016, Екатеринбург)
Теория и практика .NET-бенчмаркинга (02.11.2016, Екатеринбург)Теория и практика .NET-бенчмаркинга (02.11.2016, Екатеринбург)
Теория и практика .NET-бенчмаркинга (02.11.2016, Екатеринбург)Andrey Akinshin
 
Подружили CLR и JVM в Project Rider
Подружили CLR и JVM в Project RiderПодружили CLR и JVM в Project Rider
Подружили CLR и JVM в Project RiderAndrey Akinshin
 
Что нам готовит грядущий C#7?
Что нам готовит грядущий C#7?Что нам готовит грядущий C#7?
Что нам готовит грядущий C#7?Andrey Akinshin
 
.NET 2015: Будущее рядом
.NET 2015: Будущее рядом.NET 2015: Будущее рядом
.NET 2015: Будущее рядомAndrey Akinshin
 
Практические приёмы оптимизации .NET-приложений
Практические приёмы оптимизации .NET-приложенийПрактические приёмы оптимизации .NET-приложений
Практические приёмы оптимизации .NET-приложенийAndrey Akinshin
 
Поговорим о различных версиях .NET
Поговорим о различных версиях .NETПоговорим о различных версиях .NET
Поговорим о различных версиях .NETAndrey Akinshin
 
Низкоуровневые оптимизации .NET-приложений
Низкоуровневые оптимизации .NET-приложенийНизкоуровневые оптимизации .NET-приложений
Низкоуровневые оптимизации .NET-приложенийAndrey Akinshin
 
Основы работы с Git
Основы работы с GitОсновы работы с Git
Основы работы с GitAndrey Akinshin
 
Сборка мусора в .NET
Сборка мусора в .NETСборка мусора в .NET
Сборка мусора в .NETAndrey Akinshin
 

Mehr von Andrey Akinshin (16)

Поговорим про performance-тестирование
Поговорим про performance-тестированиеПоговорим про performance-тестирование
Поговорим про performance-тестирование
 
Сложности performance-тестирования
Сложности performance-тестированияСложности performance-тестирования
Сложности performance-тестирования
 
Поговорим про память
Поговорим про памятьПоговорим про память
Поговорим про память
 
Кроссплатформенный .NET и как там дела с Mono и CoreCLR
Кроссплатформенный .NET и как там дела с Mono и CoreCLRКроссплатформенный .NET и как там дела с Mono и CoreCLR
Кроссплатформенный .NET и как там дела с Mono и CoreCLR
 
Теория и практика .NET-бенчмаркинга (25.01.2017, Москва)
 Теория и практика .NET-бенчмаркинга (25.01.2017, Москва) Теория и практика .NET-бенчмаркинга (25.01.2017, Москва)
Теория и практика .NET-бенчмаркинга (25.01.2017, Москва)
 
Let’s talk about microbenchmarking
Let’s talk about microbenchmarkingLet’s talk about microbenchmarking
Let’s talk about microbenchmarking
 
Теория и практика .NET-бенчмаркинга (02.11.2016, Екатеринбург)
Теория и практика .NET-бенчмаркинга (02.11.2016, Екатеринбург)Теория и практика .NET-бенчмаркинга (02.11.2016, Екатеринбург)
Теория и практика .NET-бенчмаркинга (02.11.2016, Екатеринбург)
 
Подружили CLR и JVM в Project Rider
Подружили CLR и JVM в Project RiderПодружили CLR и JVM в Project Rider
Подружили CLR и JVM в Project Rider
 
Что нам готовит грядущий C#7?
Что нам готовит грядущий C#7?Что нам готовит грядущий C#7?
Что нам готовит грядущий C#7?
 
.NET 2015: Будущее рядом
.NET 2015: Будущее рядом.NET 2015: Будущее рядом
.NET 2015: Будущее рядом
 
Практические приёмы оптимизации .NET-приложений
Практические приёмы оптимизации .NET-приложенийПрактические приёмы оптимизации .NET-приложений
Практические приёмы оптимизации .NET-приложений
 
Поговорим о различных версиях .NET
Поговорим о различных версиях .NETПоговорим о различных версиях .NET
Поговорим о различных версиях .NET
 
Низкоуровневые оптимизации .NET-приложений
Низкоуровневые оптимизации .NET-приложенийНизкоуровневые оптимизации .NET-приложений
Низкоуровневые оптимизации .NET-приложений
 
Основы работы с Git
Основы работы с GitОсновы работы с Git
Основы работы с Git
 
Сборка мусора в .NET
Сборка мусора в .NETСборка мусора в .NET
Сборка мусора в .NET
 
Phd presentation
Phd presentationPhd presentation
Phd presentation
 

Поговорим про арифметику