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

Andrey Akinshin
Andrey AkinshinSoftware developer at JetBrains
Поговорим про арифметику
Андрей Акиньшин, 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
1 of 136

Recommended

Продолжаем говорить про арифметику by
Продолжаем говорить про арифметикуПродолжаем говорить про арифметику
Продолжаем говорить про арифметикуAndrey Akinshin
676 views83 slides
Продолжаем говорить о микрооптимизациях .NET-приложений by
Продолжаем говорить о микрооптимизациях .NET-приложенийПродолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложенийAndrey Akinshin
665 views58 slides
Поговорим о микрооптимизациях .NET-приложений by
Поговорим о микрооптимизациях .NET-приложенийПоговорим о микрооптимизациях .NET-приложений
Поговорим о микрооптимизациях .NET-приложенийAndrey Akinshin
855 views69 slides
Максим Хижинский Lock-free maps by
Максим Хижинский Lock-free mapsМаксим Хижинский Lock-free maps
Максим Хижинский Lock-free mapsPlatonov Sergey
2.5K views27 slides
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers» by
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»Platonov Sergey
1.7K views33 slides
Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код» by
Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»
Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»Platonov Sergey
1.5K views96 slides

More Related Content

What's hot

Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM by
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMДмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMSergey Platonov
2.8K views100 slides
Лекция 8. Intel Threading Building Blocks by
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksMikhail Kurnosov
1.3K views53 slides
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ by
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
813 views42 slides
Распространённые ошибки оценки производительности .NET-приложений by
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийMikhail Shcherbakov
518 views64 slides
хитрости выведения типов by
хитрости выведения типовхитрости выведения типов
хитрости выведения типовcorehard_by
333 views20 slides
Антон Полухин, Немного о Boost by
Антон Полухин, Немного о BoostАнтон Полухин, Немного о Boost
Антон Полухин, Немного о BoostSergey Platonov
1K views27 slides

What's hot(19)

Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM by Sergey Platonov
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMДмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Sergey Platonov2.8K views
Лекция 8. Intel Threading Building Blocks by Mikhail Kurnosov
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building Blocks
Mikhail Kurnosov1.3K views
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ by Sergey Platonov
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Sergey Platonov813 views
Распространённые ошибки оценки производительности .NET-приложений by Mikhail Shcherbakov
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложений
хитрости выведения типов by corehard_by
хитрости выведения типовхитрости выведения типов
хитрости выведения типов
corehard_by333 views
Антон Полухин, Немного о Boost by Sergey Platonov
Антон Полухин, Немного о BoostАнтон Полухин, Немного о Boost
Антон Полухин, Немного о Boost
Sergey Platonov1K views
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения by Platonov Sergey
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияДракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Platonov Sergey1K views
разработка серверов и серверных приложений лекция №3 by Eugeniy Tyumentcev
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
Eugeniy Tyumentcev361 views
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“ by Platonov Sergey
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Platonov Sergey1.3K views
разработка серверов и серверных приложений лекция №2 by Eugeniy Tyumentcev
разработка серверов и серверных приложений лекция №2разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2
Eugeniy Tyumentcev482 views
Лекция 7. Стандарт OpenMP (подолжение) by Mikhail Kurnosov
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)
Mikhail Kurnosov1.3K views
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks by Mikhail Kurnosov
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksЛекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Mikhail Kurnosov1.6K views
Семинар 5. Многопоточное программирование на OpenMP (часть 5) by Mikhail Kurnosov
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Mikhail Kurnosov816 views
Векторизация кода (семинар 3) by Mikhail Kurnosov
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)
Mikhail Kurnosov938 views
Догнать и перегнать boost::lexical_cast by Roman Orlov
Догнать и перегнать boost::lexical_castДогнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_cast
Roman Orlov7.1K views
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы. by Roman Orlov
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Roman Orlov427 views
Tech Talks @NSU: Как приручить дракона: введение в LLVM by Tech Talks @NSU
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU184 views
Введение в разработку многопоточных приложений by CUSTIS
Введение в разработку многопоточных приложенийВведение в разработку многопоточных приложений
Введение в разработку многопоточных приложений
CUSTIS829 views
Лекция 6. Стандарт OpenMP by Mikhail Kurnosov
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
Mikhail Kurnosov2.3K views

Viewers also liked

Нейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин by
Нейронечёткая классификация слабо формализуемых данных | Тимур ГильмуллинНейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
Нейронечёткая классификация слабо формализуемых данных | Тимур ГильмуллинPositive Hack Days
11.4K views26 slides
отзыв ркн по Bitcoininfo.ru by
отзыв ркн по Bitcoininfo.ruотзыв ркн по Bitcoininfo.ru
отзыв ркн по Bitcoininfo.ruSarkis Darbinyan
13.5K views2 slides
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ... by
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Ontico
33.5K views49 slides
Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ... by
Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...
Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...Ontico
3.8K views40 slides
TechLeads meetup: Евгений Потапов, ITSumma by
TechLeads meetup: Евгений Потапов, ITSumma TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma Badoo Development
7.8K views68 slides
TechLeads meetup: Макс Лапшин, Erlyvideo by
TechLeads meetup: Макс Лапшин, ErlyvideoTechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, ErlyvideoBadoo Development
8K views35 slides

Viewers also liked(20)

Нейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин by Positive Hack Days
Нейронечёткая классификация слабо формализуемых данных | Тимур ГильмуллинНейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
Нейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
Positive Hack Days11.4K views
отзыв ркн по Bitcoininfo.ru by Sarkis Darbinyan
отзыв ркн по Bitcoininfo.ruотзыв ркн по Bitcoininfo.ru
отзыв ркн по Bitcoininfo.ru
Sarkis Darbinyan13.5K views
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ... by Ontico
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Ontico33.5K views
Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ... by Ontico
Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...
Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...
Ontico3.8K views
TechLeads meetup: Евгений Потапов, ITSumma by Badoo Development
TechLeads meetup: Евгений Потапов, ITSumma TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma
Badoo Development7.8K views
TechLeads meetup: Макс Лапшин, Erlyvideo by Badoo Development
TechLeads meetup: Макс Лапшин, ErlyvideoTechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, Erlyvideo
Регулярные выражения C++ by Dmitry Bulgakov
Регулярные выражения C++Регулярные выражения C++
Регулярные выражения C++
Dmitry Bulgakov15.1K views
Презентация для соискателей о бирже дистанционной работы Crossover by Petr Tarasevich-Nikolaev
Презентация для соискателей о бирже дистанционной работы Crossover Презентация для соискателей о бирже дистанционной работы Crossover
Презентация для соискателей о бирже дистанционной работы Crossover
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P... by AvitoTech
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...
AvitoTech3.8K views
Вадим Дробинин. Защищаем себя и пользователей: руководство по безопасности by AvitoTech
Вадим Дробинин. Защищаем себя и пользователей: руководство по безопасностиВадим Дробинин. Защищаем себя и пользователей: руководство по безопасности
Вадим Дробинин. Защищаем себя и пользователей: руководство по безопасности
AvitoTech4K views
Андрей Юткин. Media Picker — to infinity and beyond by AvitoTech
Андрей Юткин. Media Picker — to infinity and beyondАндрей Юткин. Media Picker — to infinity and beyond
Андрей Юткин. Media Picker — to infinity and beyond
AvitoTech3.9K views
TechLeads meetup: Алексей Рыбак, Badoo by Badoo Development
TechLeads meetup: Алексей Рыбак, BadooTechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, Badoo
Badoo Development8.5K views
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru by Badoo Development
TechLeads meetup: Андрей Шелёхин, Tinkoff.ruTechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
Александр Пономарев — Разработка приложения под Cocaine — быстро, просто, удобно by Yandex
Александр Пономарев — Разработка приложения под Cocaine — быстро, просто, удобноАлександр Пономарев — Разработка приложения под Cocaine — быстро, просто, удобно
Александр Пономарев — Разработка приложения под Cocaine — быстро, просто, удобно
Yandex1K views
Страуструп - Язык программирования C++ by Alexey Miasoedov
Страуструп - Язык программирования C++Страуструп - Язык программирования C++
Страуструп - Язык программирования C++
Alexey Miasoedov2.2K views
Загрузка больших объемов данных для бизнес-аналитики by Badoo Development
Загрузка больших объемов данных для бизнес-аналитикиЗагрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитики
Badoo Development548 views
Презентация для соискателей by Ekaterina Artyugina
Презентация для соискателейПрезентация для соискателей
Презентация для соискателей
Ekaterina Artyugina1.4K views
Programma convengo li psi m 4-5-6 novembre 2016 by Raffaele Barone
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
Raffaele Barone477 views
Никита Шляхов. Учёт времени разработчиков by Svetlana Gulyaeva
Никита Шляхов. Учёт времени разработчиковНикита Шляхов. Учёт времени разработчиков
Никита Шляхов. Учёт времени разработчиков
Svetlana Gulyaeva1.8K views

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

Аскетичная разработка браузера by
Аскетичная разработка браузераАскетичная разработка браузера
Аскетичная разработка браузераPlatonov Sergey
1K views33 slides
Step cpp022 by
Step cpp022Step cpp022
Step cpp022Evgenij Laktionov
141 views28 slides
2.2 Стек вызовов by
2.2 Стек вызовов2.2 Стек вызовов
2.2 Стек вызововDEVTYPE
578 views18 slides
C++ exceptions by
C++ exceptionsC++ exceptions
C++ exceptionsPlatonov Sergey
984 views12 slides
Extended High-Level C-Compatible Memory Model with Limited Low-Level Pointer ... by
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
2.4K views25 slides
Распространённые ошибки оценки производительности .NET-приложений by
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийAndrey Akinshin
1K views64 slides

Similar to Поговорим про арифметику(20)

Аскетичная разработка браузера by Platonov Sergey
Аскетичная разработка браузераАскетичная разработка браузера
Аскетичная разработка браузера
Platonov Sergey1K views
2.2 Стек вызовов by DEVTYPE
2.2 Стек вызовов2.2 Стек вызовов
2.2 Стек вызовов
DEVTYPE578 views
Extended High-Level C-Compatible Memory Model with Limited Low-Level Pointer ... by Iosif Itkin
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 Itkin2.4K views
Распространённые ошибки оценки производительности .NET-приложений by Andrey Akinshin
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложений
Andrey Akinshin1K views
чернякова г.в. by sharikdp
чернякова г.в.чернякова г.в.
чернякова г.в.
sharikdp396 views
Статический анализ кода by Pavel Tsukanov
Статический анализ кода Статический анализ кода
Статический анализ кода
Pavel Tsukanov689 views
статический анализ кода by Andrey Karpov
статический анализ кодастатический анализ кода
статический анализ кода
Andrey Karpov387 views
Оптимизация в мире 64-битных ошибок by Tatyanazaxarova
Оптимизация  в мире 64-битных ошибокОптимизация  в мире 64-битных ошибок
Оптимизация в мире 64-битных ошибок
Tatyanazaxarova124 views
20130429 dynamic c_c++_program_analysis-alexey_samsonov by Computer Science Club
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 by 0xffAA
functional patterns - dotnetconf'11functional patterns - dotnetconf'11
functional patterns - dotnetconf'11
0xffAA640 views
Сложные условия в паскале by Daria Romanova
Сложные условия в паскалеСложные условия в паскале
Сложные условия в паскале
Daria Romanova5.8K views
По колено в Си++ г... коде by Tatyanazaxarova
По колено в Си++ г... кодеПо колено в Си++ г... коде
По колено в Си++ г... коде
Tatyanazaxarova340 views
D-кучи и их применение by DEVTYPE
D-кучи и их применениеD-кучи и их применение
D-кучи и их применение
DEVTYPE2.9K views
тема 2.операторы.линейный алгоритм by dasha2012
тема 2.операторы.линейный алгоритмтема 2.операторы.линейный алгоритм
тема 2.операторы.линейный алгоритм
dasha20121.2K views
Введение в синтаксис C++, часть 1 by DEVTYPE
Введение в синтаксис C++, часть 1Введение в синтаксис C++, часть 1
Введение в синтаксис C++, часть 1
DEVTYPE595 views
Введение в синтаксис C++, часть 2 by DEVTYPE
Введение в синтаксис C++, часть 2Введение в синтаксис C++, часть 2
Введение в синтаксис C++, часть 2
DEVTYPE615 views

More from Andrey Akinshin

Поговорим про performance-тестирование by
Поговорим про performance-тестированиеПоговорим про performance-тестирование
Поговорим про performance-тестированиеAndrey Akinshin
368 views105 slides
Сложности performance-тестирования by
Сложности performance-тестированияСложности performance-тестирования
Сложности performance-тестированияAndrey Akinshin
277 views91 slides
Поговорим про память by
Поговорим про памятьПоговорим про память
Поговорим про памятьAndrey Akinshin
332 views116 slides
Кроссплатформенный .NET и как там дела с Mono и CoreCLR by
Кроссплатформенный .NET и как там дела с Mono и CoreCLRКроссплатформенный .NET и как там дела с Mono и CoreCLR
Кроссплатформенный .NET и как там дела с Mono и CoreCLRAndrey Akinshin
322 views32 slides
Теория и практика .NET-бенчмаркинга (25.01.2017, Москва) by
 Теория и практика .NET-бенчмаркинга (25.01.2017, Москва) Теория и практика .NET-бенчмаркинга (25.01.2017, Москва)
Теория и практика .NET-бенчмаркинга (25.01.2017, Москва)Andrey Akinshin
3.6K views153 slides
Let’s talk about microbenchmarking by
Let’s talk about microbenchmarkingLet’s talk about microbenchmarking
Let’s talk about microbenchmarkingAndrey Akinshin
598 views41 slides

More from Andrey Akinshin(16)

Поговорим про performance-тестирование by Andrey Akinshin
Поговорим про performance-тестированиеПоговорим про performance-тестирование
Поговорим про performance-тестирование
Andrey Akinshin368 views
Сложности performance-тестирования by Andrey Akinshin
Сложности performance-тестированияСложности performance-тестирования
Сложности performance-тестирования
Andrey Akinshin277 views
Поговорим про память by Andrey Akinshin
Поговорим про памятьПоговорим про память
Поговорим про память
Andrey Akinshin332 views
Кроссплатформенный .NET и как там дела с Mono и CoreCLR by Andrey Akinshin
Кроссплатформенный .NET и как там дела с Mono и CoreCLRКроссплатформенный .NET и как там дела с Mono и CoreCLR
Кроссплатформенный .NET и как там дела с Mono и CoreCLR
Andrey Akinshin322 views
Теория и практика .NET-бенчмаркинга (25.01.2017, Москва) by Andrey Akinshin
 Теория и практика .NET-бенчмаркинга (25.01.2017, Москва) Теория и практика .NET-бенчмаркинга (25.01.2017, Москва)
Теория и практика .NET-бенчмаркинга (25.01.2017, Москва)
Andrey Akinshin3.6K views
Let’s talk about microbenchmarking by Andrey Akinshin
Let’s talk about microbenchmarkingLet’s talk about microbenchmarking
Let’s talk about microbenchmarking
Andrey Akinshin598 views
Теория и практика .NET-бенчмаркинга (02.11.2016, Екатеринбург) by Andrey Akinshin
Теория и практика .NET-бенчмаркинга (02.11.2016, Екатеринбург)Теория и практика .NET-бенчмаркинга (02.11.2016, Екатеринбург)
Теория и практика .NET-бенчмаркинга (02.11.2016, Екатеринбург)
Andrey Akinshin1.4K views
Подружили CLR и JVM в Project Rider by Andrey Akinshin
Подружили CLR и JVM в Project RiderПодружили CLR и JVM в Project Rider
Подружили CLR и JVM в Project Rider
Andrey Akinshin794 views
Что нам готовит грядущий C#7? by Andrey Akinshin
Что нам готовит грядущий C#7?Что нам готовит грядущий C#7?
Что нам готовит грядущий C#7?
Andrey Akinshin376 views
.NET 2015: Будущее рядом by Andrey Akinshin
.NET 2015: Будущее рядом.NET 2015: Будущее рядом
.NET 2015: Будущее рядом
Andrey Akinshin538 views
Практические приёмы оптимизации .NET-приложений by Andrey Akinshin
Практические приёмы оптимизации .NET-приложенийПрактические приёмы оптимизации .NET-приложений
Практические приёмы оптимизации .NET-приложений
Andrey Akinshin2.4K views
Поговорим о различных версиях .NET by Andrey Akinshin
Поговорим о различных версиях .NETПоговорим о различных версиях .NET
Поговорим о различных версиях .NET
Andrey Akinshin726 views
Низкоуровневые оптимизации .NET-приложений by Andrey Akinshin
Низкоуровневые оптимизации .NET-приложенийНизкоуровневые оптимизации .NET-приложений
Низкоуровневые оптимизации .NET-приложений
Andrey Akinshin3.8K views
Основы работы с Git by Andrey Akinshin
Основы работы с GitОсновы работы с Git
Основы работы с Git
Andrey Akinshin3.8K views
Сборка мусора в .NET by Andrey Akinshin
Сборка мусора в .NETСборка мусора в .NET
Сборка мусора в .NET
Andrey Akinshin3.9K views

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