|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Неправильные операции с вещественными числами
Код:
procedure TForm1.FormCreate(Sender: TObject); var a, b, c: Extended; begin a := 212.53; b := 212.49; c := a - b; if c = 0.04 then ShowMessage(FloatToStr(c)) end; |
#2
|
||||
|
||||
9-ую строчку заменить на
Код:
if Abs(c-0.04)<0.00000001 then Пишу программы за еду. __________________ |
#3
|
||||
|
||||
Я имею ввиду как увидеть истинное значение переменной 'с'. Например, в виде 0.039999999999999993895990990009 или двоичного кода.
Последний раз редактировалось SpectraL, 01.06.2016 в 10:44. |
#4
|
||||
|
||||
Код:
ShowMessage(FloatToStrF(c, ffGeneral, 100, 100)); Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
SpectraL (01.06.2016)
|
#5
|
||||
|
||||
Спасибо, это более точное значение, но не истинное.
Последний раз редактировалось SpectraL, 01.06.2016 в 11:02. |
#6
|
|||
|
|||
Ну, если тебе бинарное, то как-то так:
Код:
var E : ^Extended; I : ^Byte; begin E^ := 123.4567890; I := ^Byte(E); For I := 0 To 9 Do Begin Writeln(IntToStr(I)); I := I+1; End; Двоичный код уж сам как-нить "выдерешь". |
#7
|
||||
|
||||
lmikle, твой код не работает. Что это такое: I := ^Byte(E)?
Последний раз редактировалось SpectraL, 02.06.2016 в 08:53. |
#8
|
||||
|
||||
Код:
type PByteArr = ^TByteArr; TByteArr = array [0..9] of Byte; var e: Extended; pe: PByteArr; i: Integer; begin e:=Pi; pe:=@e; for i:=0 to 9 do begin Memo1.Text:=Memo1.Text+IntToHex(pe^[i], 2)+' '; end; end; Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
SpectraL (03.06.2016)
|
#9
|
||||
|
||||
1. Можно ли увидеть истинное значение с помощью отладчика (например, при трассировке)?
2. Есть ли подпрограмма округления до определённого количества значащих цифр? Последний раз редактировалось SpectraL, 03.06.2016 в 12:24. |
#10
|
||||
|
||||
Цитата:
Конечно: 1. Останавливаешь программу по брекпоинту. 2. Смотришь адрес переменной. 3. Смотришь память по этому адресу. Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#11
|
||||
|
||||
Aristarh Dark, а как посмотреть адрес и память?
|
#12
|
||||
|
||||
View - Debug Windows - CPU Windows - Entire CPU|Memory
Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
SpectraL (03.06.2016)
|
#13
|
||||
|
||||
Цитата:
Последний раз редактировалось SpectraL, 03.06.2016 в 20:19. |
#14
|
||||
|
||||
При чем тут двоичный код? И с каких пор Pi = 3.1415? В моей вселенной Пи примерно равно
Цитата:
Как сравнивать дробные числа было сказано ранее. В первом ответе в этой теме. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 03.06.2016 в 22:58. |
#15
|
||||
|
||||
Offtop
Цитата:
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
Bargest (04.06.2016)
|