|
|
|
strictfp
|
|||
|---|---|---|---|
|
#18+
Привет. я новичок в джава и у меня такая проблема: написал метод: private strictfp double calculate(double x, double y, String oper) { double res = 0; if (oper.equals("+")) { res = x + y; } else if (oper.equals("-")) { res = x - y; } else if (oper.equals("*")) { res = x * y; } else if (oper.equals("/")) { res = x / y; } else if (oper.equals("=")) { res = x; } return res; } но при некоторых вычислениях он все равно считает неправильно. Например, 1.2 * 3 = 3.59999999996 В чем может быть проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2012, 09:29:16 |
|
||
|
strictfp
|
|||
|---|---|---|---|
|
#18+
hybrid, Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2012, 09:39:33 |
|
||
|
strictfp
|
|||
|---|---|---|---|
|
#18+
rsltr, а как его использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2012, 09:49:36 |
|
||
|
strictfp
|
|||
|---|---|---|---|
|
#18+
я пишу калькулятор, округления делать нельзя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2012, 09:52:15 |
|
||
|
strictfp
|
|||
|---|---|---|---|
|
#18+
Вместо Double используйте BigDecimal Много раз уже обсуждалось и тут и в гугле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2012, 09:56:29 |
|
||
|
strictfp
|
|||
|---|---|---|---|
|
#18+
hybrid, можно для начала просто strictfp из объявления метода убрать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2012, 10:55:09 |
|
||
|
strictfp
|
|||
|---|---|---|---|
|
#18+
avp.mkhybrid, можно для начала просто strictfp из объявления метода убрать 1. Как тут влияет stractfp? 2. Это убрать можно, но это не первое. Первое - разобраться с тем, как представляются десятичные числа (double) в компьютере и какие могут быть с этим проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2012, 13:15:13 |
|
||
|
strictfp
|
|||
|---|---|---|---|
|
#18+
Leonidvavp.mkhybrid, можно для начала просто strictfp из объявления метода убрать 1. Как тут влияет stractfp? Как-то так. http://cloud-cuckoo.com.ua/content/java-strictfp-metody Leonidv2. Это убрать можно, но это не первое. Первое - разобраться с тем, как представляются десятичные числа (double) в компьютере и какие могут быть с этим проблемы. По-моему стереть одно слово и перекомпилировать программу значительно быстрее, чем в чём-нибудь разбираться... То, что он разберётся - как это решит его проблему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2012, 15:33:07 |
|
||
|
strictfp
|
|||
|---|---|---|---|
|
#18+
Считает-то он правильно. Неизбежная ошибка возникает при преобразовании 1.2 в двоичный вид. Это как если бы ты пытался 1/3 представить в десятичном виде - все равно будет ошибка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2012, 15:51:51 |
|
||
|
strictfp
|
|||
|---|---|---|---|
|
#18+
avp.mk, Когда обучаешься чем либо, лучше разбираться. И да, sctrictfp здесь не причем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2012, 16:14:11 |
|
||
|
strictfp
|
|||
|---|---|---|---|
|
#18+
Leonidvsctrictfp Для чего он нужен по-вашему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2012, 16:22:18 |
|
||
|
strictfp
|
|||
|---|---|---|---|
|
#18+
rfqСчитает-то он правильно. Неизбежная ошибка возникает при преобразовании 1.2 в двоичный вид. Это как если бы ты пытался 1/3 представить в десятичном виде - все равно будет ошибка. Размялся маленько. На глаз вроде правильно. Проверить нечем. Код: java 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2012, 21:22:56 |
|
||
|
strictfp
|
|||
|---|---|---|---|
|
#18+
Или даже так (предидущий не работал бы с отрицатеьными величинами) Код: java 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. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2012, 23:10:34 |
|
||
|
strictfp
|
|||
|---|---|---|---|
|
#18+
avp.mk, Чем это лучше String.format("%.70f", 1.02)? И да, вы показываете, что не понимаете обработку вещественных чисел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2012, 23:44:12 |
|
||
|
strictfp
|
|||
|---|---|---|---|
|
#18+
Leonidvavp.mk, Чем это лучше String.format("%.70f", 1.02)? К сожалению они делают разные вещи, их несколько сложно сравнивать =) LeonidvИ да, вы показываете, что не понимаете обработку вещественных чисел. Где это я так прокололся, что вы разгадали мой секрет?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2012, 10:43:38 |
|
||
|
strictfp
|
|||
|---|---|---|---|
|
#18+
avp.mkLeonidvavp.mk, Чем это лучше String.format("%.70f", 1.02)? К сожалению они делают разные вещи, их несколько сложно сравнивать =) И что делает ваша функция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2012, 10:55:15 |
|
||
|
strictfp
|
|||
|---|---|---|---|
|
#18+
Хм.... Прошу прощения за внезапный ап. Код: java 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. Double:0.3183098861837907 Float:0.31830987 Double:0.3183098861837907 Float:0.31830987 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 02:16:13 |
|
||
|
strictfp
|
|||
|---|---|---|---|
|
#18+
mayton, Я не понял вопроса) P.S. Тема у функций одинаковые.. Так должно быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 16:05:58 |
|
||
|
strictfp
|
|||
|---|---|---|---|
|
#18+
Я вот и думаю. Должно или не должно. The Java® Virtual Machine Specification Java SE 7 Edition 2.8.2 Floating-Point Modes Every method has a floating-point mode, which is either FP-strict or not FPstrict. The floating-point mode of a method is determined by the setting of the ACC_STRICT flag of the access_flags item of the method_info structure (§4.6) defining the method. A method for which this flag is set is FP-strict; otherwise, the method is not FP-strict. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 16:24:40 |
|
||
|
strictfp
|
|||
|---|---|---|---|
|
#18+
strictfp гарантирует одинаковость результатов на разных (со)процессорах. Смысл гонять такие тесты на одном и том же сопроцессоре одного и того же интела. Вот если у вас под руками Power и ARM - да, интересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 16:59:44 |
|
||
|
strictfp
|
|||
|---|---|---|---|
|
#18+
ОК. Я понял. Я просто другой смысл узрел в документации по JVM. ну да ладно. Всем спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 17:49:02 |
|
||
|
strictfp
|
|||
|---|---|---|---|
|
#18+
У меня не получилось смоделировать случай чтобы метод с модификатором strictfp считал не так как точно такойже метод без этого модификатора. Может в VM есть флаг который определяет ограничивать точность всех расчётов или нет? (и по умолчанию он установлен) TestStrictFp Код: java 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 20:07:06 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37804898&tid=2128654]: |
0ms |
get settings: |
15ms |
get forum list: |
23ms |
check forum access: |
8ms |
check topic access: |
8ms |
track hit: |
45ms |
get topic data: |
19ms |
get forum data: |
4ms |
get page messages: |
113ms |
get tp. blocked users: |
3ms |
| others: | 280ms |
| total: | 518ms |

| 0 / 0 |
