|
Как вывести точное значение float'а?
|
|||
---|---|---|---|
#18+
Есть набор бит, нужно его сконвертировать во float и вывести точное значение. Как это сделать в Java? Для примера, вот такой набор из 32-х бит "00111111100000000000000000000001" при записи во float представляет число 1.00000011920928955078125. Проверить, что это так, можно например на сайте https://www.h-schmidt.net/FloatConverter/IEEE754.html Но, простым printf выводится совсем другое значение float'a. Код: java 1. 2. 3.
Такой код выводит 1.000000 1192092896 0000000. А мне нужно получить 1.000000 11920928955078125 . Как это сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 02:16 |
|
Как вывести точное значение float'а?
|
|||
---|---|---|---|
#18+
Float и "точное значение" - это оксюморон. Возможно тут вы сможете найти ответ на свой вопрос Еще есть предположение, что сам System.out.printf округляет значение. Каково значение fval в отладчике? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 07:59 |
|
Как вывести точное значение float'а?
|
|||
---|---|---|---|
#18+
Никакой это не оксюморон, в стандарте IEEE 754 каждому значению набора бит во float'е соответсвует одно определённое число. Вот его и нужно вывести. В отладчике показывает "1.0000001", но там просто используется Float.toString(), а он показывает приблизательно. Из документации к этому методу: "There must be at least one digit to represent the fractional part, and beyond that as many, but only as many, more digits as are needed to uniquely distinguish the argument value from adjacent values of type float." ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 19:30 |
|
Как вывести точное значение float'а?
|
|||
---|---|---|---|
#18+
Можно создать BigDecimal на основе float-а и его распечатать - должен получить нужное значение ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2020, 00:46 |
|
Как вывести точное значение float'а?
|
|||
---|---|---|---|
#18+
denbkh Никакой это не оксюморон, в стандарте IEEE 754 каждому значению набора бит во float'е соответсвует одно определённое число. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2020, 07:22 |
|
Как вывести точное значение float'а?
|
|||
---|---|---|---|
#18+
denbkh Никакой это не оксюморон P.S. Судя по javadoc toString(fload) выводит разные строковые значения для разных битовых значений float. Необязательно точные, но разных для разных. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2020, 07:54 |
|
Как вывести точное значение float'а?
|
|||
---|---|---|---|
#18+
WikiЧисла одинарной точности с плавающей запятой эквивалентны по точности числу с 7-8 значащими десятичными цифрами (в среднем 7,6) denbkh Такой код выводит 1.000000 1192092896 0000000. Загибаем пальца: 1 = 1 1 = 2 9 = 3 2 = 4 0 = 5 9 = 6 2 = 7 8 = 8 9 = 9 6 = 10 Википедия обещала, что точность float 7-8 знаков, toString даже перестарался denbkh А мне нужно получить 1.000000 11920928955078125 . Как это сделать? http://proglang.su/java/numbers-random с помощью данной ф-ции можно получить float любой точность ))) хоть 100500 знаков после запятой ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2020, 15:31 |
|
Как вывести точное значение float'а?
|
|||
---|---|---|---|
#18+
Вообще в плане точности 7-8 знаков, это больше похоже на эти цифры: автор1. 00000011 920928955078125 Потому как это число равно 1 + 2 ^ -23 - минимальному ближайшему число после 1. Если надо точнее чем эти 8 цифр "00000011", то это уже сложно (ну если они не выражаются через степени двойки конечно) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2020, 17:45 |
|
Как вывести точное значение float'а?
|
|||
---|---|---|---|
#18+
denbkh, я думаю, что вам нужно представление чисел с плавающей точкой в двойчной системе (обычно это идет в одной из первых глав учебников по CS) посмотрите вот это (и именно английский вариант!) https://en.wikipedia.org/wiki/Floating-point_arithmetic ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2020, 18:12 |
|
Как вывести точное значение float'а?
|
|||
---|---|---|---|
#18+
SpringMan Можно создать BigDecimal на основе float-а и его распечатать - должен получить нужное значение Спасибо, такой код Код: java 1.
выводит нужное мне значение 1.00000011920928955078125! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 04:10 |
|
Как вывести точное значение float'а?
|
|||
---|---|---|---|
#18+
Basil A. Sidorov denbkh Никакой это не оксюморон Это так, но значение float'ов исходя из формулы их вычисления судя по всему всегда конечны, т.е без дроби их можно записать за конечное количество цифр после запятой. Если это не так, то для опровержения приведите float, точное значение которого нельзя записать за конечное количество цифр ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 04:39 |
|
Как вывести точное значение float'а?
|
|||
---|---|---|---|
#18+
denbkh Если это не так, то для опровержения приведите float, точное значение которого нельзя записать за конечное количество цифр ;) Любое трансцендентное число. Пи = 3.14159.... Е = 2.71828.... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 08:04 |
|
Как вывести точное значение float'а?
|
|||
---|---|---|---|
#18+
SQL2008 denbkh Если это не так, то для опровержения приведите float, точное значение которого нельзя записать за конечное количество цифр ;) Любое трансцендентное число. Пи = 3.14159.... Е = 2.71828.... Во float (и double) нельзя записать точно ни Пи, ни Е, ни даже 0.2 Так что Пи нельзя вывести, но его никогда не будет в компьютере. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 09:07 |
|
|
start [/forum/topic.php?fid=59&msg=39986925&tid=2120723]: |
0ms |
get settings: |
5ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
50ms |
get topic data: |
2ms |
get forum data: |
1ms |
get page messages: |
326ms |
get tp. blocked users: |
0ms |
others: | 295ms |
total: | 686ms |
0 / 0 |