|
|
|
Загадка
|
|||
|---|---|---|---|
|
#18+
Пишем так Код: pascal 1. 2. 3. работает неправильно. Пишем так Код: pascal 1. 2. 3. Работает правильно. При этом Screen.PixelsPerInch в отладчике = 96. Ок, пишем так: Код: pascal 1. 2. 3. 4. 5. 6. И снова работает неправильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2017, 16:09:25 |
|
||
|
Загадка
|
|||
|---|---|---|---|
|
#18+
asviridenkov, Если посмотреть в исходники, то там AFAIR используется Код: pascal 1. Видимо, не просто так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2017, 16:21:53 |
|
||
|
Загадка
|
|||
|---|---|---|---|
|
#18+
asviridenkov, Подозреваю, это из-за того что 11 * 96 / 96 - константа, вычисляемая компилятором, а всё остальное выражение, которое вычисляется в рантайм с какой-то точностью (не знаю к чему он по-умолчанию приводит - Real/Single?). Вот эта точность + Round и приводит к неожиданным результатам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2017, 16:25:25 |
|
||
|
Загадка
|
|||
|---|---|---|---|
|
#18+
alekcvpasviridenkov, Подозреваю, это из-за того что 11 * 96 / 96 - константа, вычисляемая компилятором, а всё остальное выражение, которое вычисляется в рантайм с какой-то точностью (не знаю к чему он по-умолчанию приводит - Real/Single?). Вот эта точность + Round и приводит к неожиданным результатам. Так там вокруг round стоит, так что точность вычисления не должна влиять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2017, 16:29:35 |
|
||
|
Загадка
|
|||
|---|---|---|---|
|
#18+
asviridenkovТак там вокруг round стоит, так что точность вычисления не должна влиять. А отладчик что показывает на выражении round(11 * Screen.PixelsPerInch / 96) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2017, 16:40:57 |
|
||
|
Загадка
|
|||
|---|---|---|---|
|
#18+
asviridenkov, Тогда что именно не работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2017, 17:07:43 |
|
||
|
Загадка
|
|||
|---|---|---|---|
|
#18+
alekcvpasviridenkov, Тогда что именно не работает? Этот код работает совершенно по-разному, в первом случае стрелка у хинта есть, во втором нет, хотя казалось бы результат должен быть идентичным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2017, 18:56:53 |
|
||
|
Загадка
|
|||
|---|---|---|---|
|
#18+
asviridenkovЭтот код работает совершенно по-разному, в первом случае стрелка у хинта есть, во втором нет, хотя казалось бы результат должен быть идентичным. Во втором варианте round - константа, в первом и третьем - вычисление с приведением различных типов. Выделите отдельной строкой SplitRect и посмотрите в отладчике (окно assembler) какой код генерируется компилятором. Думаю после этого вопросов не останется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2017, 19:23:16 |
|
||
|
Загадка
|
|||
|---|---|---|---|
|
#18+
При использовании round имейте в виду, что эта функция производит округление по банковским правилам, где точная половина значения вызывает округление к четному числу (2.5 -> 2, 3.5 -> 4). Функция MulDiv работает с целыми числами и всегда округляет до ближайшего целого (2.5 -> 3, 3.5 -> 4). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2017, 19:34:32 |
|
||
|
Загадка
|
|||
|---|---|---|---|
|
#18+
FreedoomВо втором варианте round - константа, в первом и третьем - вычисление с приведением различных типов. Выделите отдельной строкой SplitRect и посмотрите в отладчике (окно assembler) какой код генерируется компилятором. Думаю после этого вопросов не останется. Уже теплее)) А не глядя в отладчик можете угадать причину? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2017, 20:07:53 |
|
||
|
Загадка
|
|||
|---|---|---|---|
|
#18+
Сергей NПри использовании round имейте в виду, что эта функция производит округление по банковским правилам, где точная половина значения вызывает округление к четному числу (2.5 -> 2, 3.5 -> 4). Функция MulDiv работает с целыми числами и всегда округляет до ближайшего целого (2.5 -> 3, 3.5 -> 4). Тем не менее, в обоих случаях round возвращает ровно 11. Так что дело не в округлении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2017, 20:08:45 |
|
||
|
Загадка
|
|||
|---|---|---|---|
|
#18+
asviridenkov> А не глядя в отладчик можете угадать причину? Типы разные что ли? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2017, 20:15:48 |
|
||
|
Загадка
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустамasviridenkov> А не глядя в отладчик можете угадать причину? Типы разные что ли? Типы чего? И как это влияет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2017, 20:16:31 |
|
||
|
Загадка
|
|||
|---|---|---|---|
|
#18+
asviridenkovИ как это влияет?очевидно, на выбор перегруженной функции Код: pascal 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2017, 20:23:15 |
|
||
|
Загадка
|
|||
|---|---|---|---|
|
#18+
fd00chasviridenkovИ как это влияет?очевидно, на выбор перегруженной функции Код: pascal 1. 2. Приз в студию! Но не кажется ли уважаемым донам, что сама ситуация, когда выбор функции меняется в зависимости от того что находится внутри round, не вполне здоровая? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2017, 20:25:54 |
|
||
|
Загадка
|
|||
|---|---|---|---|
|
#18+
asviridenkovПриз в студию!вероятно, я просто первый, кто не поленился найти объявления этих функций ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2017, 20:28:05 |
|
||
|
Загадка
|
|||
|---|---|---|---|
|
#18+
asviridenkovНо не кажется ли уважаемым донам, что сама ситуация, когда выбор функции меняется в зависимости от того что находится внутри round, не вполне здоровая?вообще, на баг похоже. интересно, что на Seattle я в случае сложения с константой так и не смог добиться вызов integer-варианта вообще а вот без константы начитается веселье, как и у тебя в старт-посте Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2017, 20:38:17 |
|
||
|
Загадка
|
|||
|---|---|---|---|
|
#18+
fd00ch, так cValue то у тебя не константа, по факту она переменная ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2017, 21:01:29 |
|
||
|
Загадка
|
|||
|---|---|---|---|
|
#18+
asviridenkov, по факту у нее точно задан тип)) в "краткой" записи появляется возможность порассуждать, имеет ли компилятор право принять ее за Double ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2017, 21:12:39 |
|
||
|
Загадка
|
|||
|---|---|---|---|
|
#18+
asviridenkovНо не кажется ли уважаемым донам, что сама ситуация, когда выбор функции меняется в зависимости от того что находится внутри round, не вполне здоровая?Нет, не кажется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2017, 21:16:32 |
|
||
|
Загадка
|
|||
|---|---|---|---|
|
#18+
Можно немного помочь компилятору, будет нормально: Код: pascal 1. 2. 3. 4. 5. Косячок, конечно: Код: pascal 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2017, 21:17:07 |
|
||
|
Загадка
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамasviridenkovНо не кажется ли уважаемым донам, что сама ситуация, когда выбор функции меняется в зависимости от того что находится внутри round, не вполне здоровая?Нет, не кажется. Ну, разверни свою мысль. То есть тебя устраивает, что ты должен точно следить, что будет внутри round, константа или значение, несмотря на то, что round то нифига не overloaded и на то что вовне ее, параметр влиять никак не должен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2017, 21:19:23 |
|
||
|
Загадка
|
|||
|---|---|---|---|
|
#18+
makhaon, с помощью то все понятно, более того я бы "понял и простил" если бы в обоих случаях вызывался double вариант. Но вот то, что вызовы получаются разные, на мой взгляд недопустимо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2017, 21:20:49 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39559486&tid=2041520]: |
0ms |
get settings: |
6ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
12ms |
get forum data: |
4ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
| others: | 227ms |
| total: | 379ms |

| 0 / 0 |
