- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
with Ada.Integer_Text_Io, Ada.Text_Io;
use Ada.Integer_Text_Io, Ada.Text_Io;
procedure Test is
v : Long_Float := 26.0;
v1 : float := 26.0;
begin
while (v<27.0) loop
Put_Line("Value = " & Long_Float'image(v));
v:=v+0.2;
end loop;
while (v1<27.0) loop
Put_Line("Value = " & float'image(v1));
v1:=v1+0.2;
end loop;
end;
bormand 23.10.2012 21:25 # +3
3.14159265 23.10.2012 21:26 # 0
Думал строгая типизация как-то запретит подобную херь.
А это получается предательское крестофлоатство.
TarasB 24.10.2012 09:42 # +1
3.14159265 24.10.2012 14:20 # 0
TarasB 24.10.2012 14:24 # 0
Например, тут, как видно, дело не в типах, а в особенностях компьютерной арифметики.
3.14159265 24.10.2012 14:31 # 0
>Я не могу придумать случай, где это что-то портит.
Неявно! Ну допустим ты написал
Float f:=3.141592653589793;
А оно неявно обрезало младшие биты. И в итоге у тебя получается 3.14159 - и это без предупрежедния.
В играх-то может и ничего не испортит.
TarasB 24.10.2012 14:51 # +2
Во-вторых, ну есть небольшая неприятность, но это несерьёзно. Выбирая такое неточное говно, как Float, ты уже подписываешься на то, что тебе пофиг точность.
bormand 24.10.2012 15:12 # +2
Тогда этот ворнинг надо выдавать всегда.
Я написал 0.3, а оно отрезало бесконечно много младших бит, и превратило мое прекрасное 0.3 в сраное говно 0.2999999999999. И это без предупреждения...
3.14159265 24.10.2012 15:21 # +1
Это можно представить в памяти как угодно в виде дроби, например - 3/10. Язык высокого уровня ведь должен абстрагировать нас от этого.
А когда переходим к дискретному представлению - тут то и происходит потеря данных.
Это как векторное изображение и растр.
bormand 24.10.2012 15:58 # +4
С этим все ок: http://ideone.com/cuXp8S.
HaskellGovno 24.10.2012 16:30 # +3
3.14159265 24.10.2012 18:27 # 0
TarasB 24.10.2012 16:04 # 0
Только эта фигня с символами всё равно сосёт, потому что см. пример с кубическим уравнением ниже.
HaskellGovno 24.10.2012 16:33 # +1
guest 23.10.2012 22:01 # +1
[summon]В Аде есть Fixed или Rational?[/summon]
HaskellGovno 24.10.2012 00:00 # +3
[summon=Taras]
TarasB 24.10.2012 09:42 # +1
Lure Of Chaos 23.10.2012 23:33 # +1
TarasB 24.10.2012 09:40 # +1
Сам штоле вместо a<=b подрисовывать a<=b+eps?
Я думал, про то, как надо сравнивать вещественные, на информатике рассказывают.
Vindicar 24.10.2012 10:37 # +3
TarasB 24.10.2012 10:58 # +2
TarasB 24.10.2012 15:56 # 0
(2+sqrt(5))^(1/3) + (2-sqrt(5))^(1/3), и сию хреноту никакими символьными преобразованиями превратить в единицу нельзя.
roman-kashitsyn 24.10.2012 16:07 # +1
Всегда можно сначала попробовать поискать перебором рациональные корни через "теорему о рациональных корнях", а не по-тупому кардано запускать
Steve_Brown 24.10.2012 16:07 # +1
3.14159265 24.10.2012 16:27 # +2
Я понимаю что это вброс (но уверен что пример взят тобой не из потолка и был где-то подсмотрен),
Потому интуиция подсказывает что это решаемо и потрачу 10 минут своей жизни.
Ты внимательно смотришь?
Где a1=qubr(2+sqr(5)^2)=qubr(4+2*2*sqr(5)+5) ), a2==qubr(2-sqr(5)^2)=qubr(4-2*2*sqr(5)+5))
3.14159265 24.10.2012 16:37 # 0
(2-sqr(5))*a1
fix
b1= (2+sqr(5)); b2=(2-sqr(5));
PS> Не торопитесь меня плюсовать. Тут возможен Усрус вариант
3.14159265 24.10.2012 17:10 # −1
3.14159265 24.10.2012 17:41 # −1
3.14159265 24.10.2012 17:15 # −1
3.14159265 24.10.2012 17:35 # −1
3.14159265 24.10.2012 17:39 # −1
(sqr(5)+1)^3/8
b2=2-sqr(5)=(16-8*sqr(5))/8=(-5*sqr(5) + 3*5 + -3*sqr(5) + 1)/8=
(1-sqr(5))^3/8.
a1= ( cubr(b1) )^2; a2= ( cubr(b2) )^2;
a1=(sqr(5)+1)/2;a2=(1-sqr(5))/2
3.14159265 24.10.2012 17:54 # +1
Снова ошибка. Забыт квадрат.
Конечно зря я повелся думал 10 минут, а проебал час.
Потерял я сноровку - задача реально на 20 минут.
TarasB 24.10.2012 18:11 # 0
3.14159265 24.10.2012 18:24 # 0
Можно было представить моё решение и попроще, но это ж был процесс.
И да - на бумаге решать такие вещи - гораздо удобнее.
TarasB 24.10.2012 18:54 # +2
Да, признаю, это правда.
defecate-plusplus 24.10.2012 16:38 # +1
3.14159265 24.10.2012 16:40 # +2
TarasB 24.10.2012 18:09 # 0
Дорогой мой, я закончил отделение чистмата факультета Мат-Мех СПбГУ, а пример с выражением, которое никак не преобразовать, я взял из книжки "Математическая энциклопедия для школьников" серии Аванта+.
roman-kashitsyn 24.10.2012 17:44 # +4
3.14159265 24.10.2012 18:00 # 0
TarasB 24.10.2012 18:06 # 0
3.14159265 24.10.2012 18:13 # +1