|
|
|
Задачка из области математики.
|
|||
|---|---|---|---|
|
#18+
Есть вещественное число R, которое представлено в переменной типа double (IEEE 754) Нужно найти наибольшую десятичную мантису, которая удовлетворяет условию R % 10^M = 0 // Делится нацело без остатка. Другими словами, найти последную ненулевую позицию в десятичном предтсавлении числа. На примере: 970010.000 -> 1 970000.000 -> 4 970000.001 -> -3 Задача стоит иммено в поиске оптималного решения в плане времени вычислений. Какие будут соображения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2017, 15:43 |
|
||
|
Задачка из области математики.
|
|||
|---|---|---|---|
|
#18+
mikron, 1. Переводим в стандартное представление 0.уууExxx. 2. Результат = xxx- количество знаков yyy. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2017, 15:55 |
|
||
|
Задачка из области математики.
|
|||
|---|---|---|---|
|
#18+
mikronНа примере: 970010.000 -> 1 970000.000 -> 4 970000.001 -> -3 Видишь ли... например, последнее из значений не может быть представлено в виде double по IEEE754 точно таким. Максимально близкое значение - это 0x412D9A200083126F = 970000,001000000047497451305389. Что наводит на мысль, что минус три как бы не очень правильный результат... Так что если ориентироваться не на значение, а на его представление - то, наверное, наиболее оптимальным будет именно получение строкового представления и обработка полученной строки с целью выявления той самой "точки отсечения". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2017, 16:02 |
|
||
|
Задачка из области математики.
|
|||
|---|---|---|---|
|
#18+
Akina, Это только пример для наглядности. Пусь для начала число будет точно представимым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2017, 17:28 |
|
||
|
Задачка из области математики.
|
|||
|---|---|---|---|
|
#18+
AkinaТак что если ориентироваться не на значение, а на его представление - то, наверное, наиболее оптимальным будет именно получение строкового представления и обработка полученной строки с целью выявления той самой "точки отсечения". Я не уверен, что точно представляю себе как работает форматирование / создание строкового / десятичного представления, но в моём представлении для начала придётся вычислить log10(R) и последователно извлекать значения до достижения остатком опредлённой epsilon. Можно ли сделать это быстрее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2017, 17:41 |
|
||
|
Задачка из области математики.
|
|||
|---|---|---|---|
|
#18+
mikronAkinaТак что если ориентироваться не на значение, а на его представление - то, наверное, наиболее оптимальным будет именно получение строкового представления и обработка полученной строки с целью выявления той самой "точки отсечения". Я не уверен, что точно представляю себе как работает форматирование / создание строкового / десятичного представления, но в моём представлении для начала придётся вычислить log10(R) и последователно извлекать значения до достижения остатком опредлённой epsilon. Можно ли сделать это быстрее? нужно начинать с того , что отрицательная мантиса говорит о том что число меньше 1 . и вобще числа нужно приводить к номализованному виду. но.... математически нормализованный вид x . ]xxx e y по стандарту IEEE 754 не всегда проходит по точности , там есть свои заморочки и исключения для чисел с мантисой близкой к 1 . и для вычислений может использоваться вид xx . [xx e y-1 ваши примеры в нормализованом виде : 970000.001 = 9.70000001 e 5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2017, 18:49 |
|
||
|
Задачка из области математики.
|
|||
|---|---|---|---|
|
#18+
д0kХmikronпропущено... Я не уверен, что точно представляю себе как работает форматирование / создание строкового / десятичного представления, но в моём представлении для начала придётся вычислить log10(R) и последователно извлекать значения до достижения остатком опредлённой epsilon. Можно ли сделать это быстрее? нужно начинать с того , что отрицательный порядок говорит о том что число меньше 1 . и вобще числа нужно приводить к номализованному виду. но.... математически нормализованный вид x.xxx e y по стандарту IEEE 754 не всегда проходит по точности , там есть свои заморочки и исключения для чисел с мантисой близкой к 1 . и для вычислений может использоваться вид xx.xx e y-1 ваши примеры в нормализованом виде : 970000.001 = 9.70000001 e 5 прошу прощения ято то я туплю к концу дня , исправился . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2017, 18:51 |
|
||
|
Задачка из области математики.
|
|||
|---|---|---|---|
|
#18+
mikronПусь для начала число будет точно представимым.Если округлять не надо, то есть мысль, как это сделать для чисел от 0 до 1. Любая отрицательная степень двойки записывается в десятичной системе счисления так, что количество цифр после точки равно показателю (без минуса). Например, 2 -3 = 0.125, 3 цифры после точки. И так со всеми: Код: plaintext 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. Код: plaintext 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2017, 05:19 |
|
||
|
Задачка из области математики.
|
|||
|---|---|---|---|
|
#18+
Пётр Седов, Спасибо за детальный ответ. Ваше должно работать для всех вещественнух чисел за исключением натуральных. Таким образом для полного решения необходимо только найти log10(R) целую часть / ограниченнум с низу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2017, 09:43 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39419150&tid=1340462]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
182ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 452ms |

| 0 / 0 |
