|
|
|
float + double
|
|||
|---|---|---|---|
|
#18+
Привет всем, VS2005, Win32 пишу следующую вещь: Код: plaintext 1. 2. 3. 4. 5. Вывод в консоль: Код: plaintext 1. 2. 3. 4. Использование Код: plaintext 1. Вопрос: существует ли какая-нибудь возможность присвоить в тип float или double значение "1.000000000E+038" или любое другое значение для которого возникает такой мусор? Очевидно, об ошибках округления здесь не может быть речи - простое присваивание. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 05:03 |
|
||
|
float + double
|
|||
|---|---|---|---|
|
#18+
1211212 wrote: > Вывод в консоль: > 340282346638528860000000000000000000000.000000 > 340282346600000020000000000000000000000.000000 > 99999996802856925000000000000000000000.000000 > 99999999999999998000000000000000000000.000000 3.402823e+038 3.402823e+038 > 1.000000e+038 1.000000e+038 А что, собственно, вам не нравится? Все правильно, присваивается "приблизительно" 1e38, ведь, как я понимаю, в float степень возведения (или как она там называется) не десятичная, а двоичная, а 1E38 нельзя при помощи доступных битов флоата смещением получить Попробуйте более высокую точность поставить, но это все равно не поможет. Лучше использовать библиотеку для работы с целыми числами произвольного размера, вроде бы в состав GNU bc (который может целочисленно 65536 возвести в степень 65536, без потерь точности) такая входит, доступна под лицензией GNU GPL. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 06:08 |
|
||
|
float + double
|
|||
|---|---|---|---|
|
#18+
Вопрос неясен. Что нужно-то получить? Есть библиотека GMP, если что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 08:48 |
|
||
|
float + double
|
|||
|---|---|---|---|
|
#18+
griegВопрос неясен. Что нужно-то получить? присваивая 1.000000000E+038, нужно получить в переменной 1.000000000E+038. griegЕсть библиотека GMP, если что. не подскажите адрес? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 09:20 |
|
||
|
float + double
|
|||
|---|---|---|---|
|
#18+
1211212 пишет: > float s1 = *3*.402823466E+*038*, s2 = *1*.000000000E+*038*; > Вопрос: существует ли какая-нибудь возможность присвоить в тип float или > double значение "1.000000000E+038" или любое > другое значение для которого возникает такой мусор? Да > > Очевидно, об ошибках округления здесь не может быть речи - простое > присваивание. Это они и есть. Присваивание в числа с плавающей точкой уже подразумевает округление. Потому что ты переводишь число из десятичной дроби в двоичную. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 10:12 |
|
||
|
float + double
|
|||
|---|---|---|---|
|
#18+
1211212 пишет: > Есть библиотека GMP, если что > не подскажите адрес? www.gnu.org и далее в каталог. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 10:13 |
|
||
|
float + double
|
|||
|---|---|---|---|
|
#18+
1211212 wrote: > не подскажите адрес? находится в гугле запросом GNU GMP grieg wrote: > Вопрос неясен. Что нужно-то получить? Человек хочет во флоате сохранить точное значение 1E38, без ошибок округления. т.е. не 99999... а 100000. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 11:52 |
|
||
|
float + double
|
|||
|---|---|---|---|
|
#18+
Спасибо за отклики и ссылки. На самом деле, я действительно не понимаю почему возникает ошибка округления. Из сказанного следует, что он не понимает, что справа расположено число float и приводит (вычисляет) переданное значение к формату хранения типа float. Почему ему просто не положить переданное точное значение мантиссы в мантиссу переменной, а экспоненты в экспоненту - может это можно как-то указать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 13:11 |
|
||
|
float + double
|
|||
|---|---|---|---|
|
#18+
1211212 пишет: > На самом деле, я действительно не понимаю почему возникает ошибка > округления. Это ты не поймешь, если не знаешь, как храняться числа с плавающей точкой в ЭВМ. > Почему ему просто не положить переданное точное значение мантиссы в > мантиссу переменной, а экспоненты в экспоненту - может это можно как-то > указать? Они у тебя десятичные. А в компьютере - двоичные. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 13:22 |
|
||
|
float + double
|
|||
|---|---|---|---|
|
#18+
1211212Почему ему просто не положить переданное точное значение мантиссы в мантиссу переменной, а экспоненты в экспоненту - может это можно как-то указать? 38 по основанию 2 целочисленно не раскладывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 13:23 |
|
||
|
float + double
|
|||
|---|---|---|---|
|
#18+
Akh 1211212Почему ему просто не положить переданное точное значение мантиссы в мантиссу переменной, а экспоненты в экспоненту - может это можно как-то указать? 38 по основанию 2 целочисленно не раскладывается. Тьфу, сорри. Единица с 38-ю нулями на 2 не раскладывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 13:32 |
|
||
|
float + double
|
|||
|---|---|---|---|
|
#18+
Ясно, извиняюсь за назойливость... Какие-нибудь итерации имеют смысл? Скажем, через строку корректируя ошибку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 13:32 |
|
||
|
float + double
|
|||
|---|---|---|---|
|
#18+
1211212Ясно, извиняюсь за назойливость... Какие-нибудь итерации имеют смысл? Скажем, через строку корректируя ошибку? Если у вас есть допустимая погрешность, то работайте с вещественными числами, и округляйте результат до необходимой точности. Выбирете подходящих тип для хранения данных с запасом ошибки накопления. Если погрешности допустимой нет, то работайте с дробями, используйте целочисленные бибиотеки, которые вам советуют. Все остальные варинты - это извращения и хитрости, которые можно применить в какой-нибудь отдельной не сложной задаче, но вспоминать их будуте как страшный сон. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 13:38 |
|
||
|
float + double
|
|||
|---|---|---|---|
|
#18+
1211212 wrote: > Какие-нибудь итерации имеют смысл? Скажем, через строку корректируя > ошибку? Нет. Пока будет использоваться float/double, будут ошибки округления. Все. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 13:39 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34660908&tid=2028520]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
45ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 340ms |

| 0 / 0 |
