Начало » Программирование » Delphi » Округление (Странности Delphi 11)
Округление [сообщение #4852] |
Mon, 08 April 2024 18:18 |
sf
Сообщений: 11 Зарегистрирован: July 2023
|
Junior Member |
|
|
Народ, есть вот такой код с почти похожими исходными данными для округления:
Writeln(SimpleRoundTo(0.09435, -4));
Writeln(SimpleRoundTo(0.19435, -4));
Writeln(SimpleRoundTo(0.29435, -4));
Writeln(SimpleRoundTo(0.39435, -4));
Writeln(SimpleRoundTo(0.49435, -4));
Writeln(SimpleRoundTo(0.59435, -4));
Writeln(SimpleRoundTo(0.69435, -4));
Writeln(SimpleRoundTo(0.79435, -4));
Writeln(SimpleRoundTo(0.89435, -4));
Writeln(SimpleRoundTo(0.99435, -4));
Спорим, не угадаете, что будет на выходе? Я, например, до сих пор под впечатлением. Вот такой результат ():
9.44000000000000E-0002
1.94300000000000E-0001
2.94300000000000E-0001
3.94400000000000E-0001
4.94400000000000E-0001
5.94400000000000E-0001
6.94400000000000E-0001
7.94400000000000E-0001
8.94400000000000E-0001
9.94400000000000E-0001
Это, сцука, какое-то новое слово в математике!
А мы тут с народом третий день бъемся, переводим проект на Лазаря и математика не совпадает. Теперь понятно почему. У Лазаря всё как положено:
9.43999999999999999973E-0002
1.94400000000000000005E-0001
2.94400000000000000014E-0001
3.94400000000000000008E-0001
4.94400000000000000003E-0001
5.94400000000000000024E-0001
6.94399999999999999992E-0001
7.94400000000000000014E-0001
8.94399999999999999981E-0001
9.94400000000000000003E-0001
Как дальше жить?
|
|
|
|
|
Re: Округление [сообщение #4902 является ответом на сообщение #4901] |
Sun, 14 April 2024 00:29 |
SD
Сообщений: 414 Зарегистрирован: August 2022
|
Senior Member |
|
|
И? Ещё с первой версии Дельфи отбрасывает младший бит при сравнении и выводе плавающих чисел. Собственно, это поведение было ещё в Турбо Паскале. Это изначально учебный язык, поэтому он сделан так, чтобы не пугать школьников тем, что 0,1+0,1<>0,2.
|
|
|
Переход к форуму:
Текущее время: Tue Dec 10 07:58:28 GMT+3 2024
Общее время, затраченное на создание страницы: 0.00870 секунд
|