Квадратный корень с большого числа
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Квадратный корень с большого числа - 2006-08-20 20:28:38
|
|
|
c001z3rO
Сообщений: 80
Оценки: 0
Присоединился: 2005-09-21 21:24:47
|
В общем пишу на Delphi/Pascal программу и в ней есть такое событие когда нужно добыть квадратный корень с большого числа. Code: … q:real; begin q:=sqrt(z); …
В общем если z меньше 2000000000 то всё ОК, а вот если оно больше 2000000000, то ничего не получаеться. Кто нить может что-то подсказать по этому поводу?
|
|
|
Квадратный корень с большого числа - 2006-08-20 20:45:49
|
|
|
freddi
Сообщений: 213
Оценки: 0
Присоединился: 2006-04-17 18:03:00
|
попробуй для переменной q поменять тип на double или на extended.
|
|
|
Квадратный корень с большого числа - 2006-08-20 20:54:28
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
больше 2000000000, или может быть, всё-таки, границей является 2147483647? Если второе, то, значит твоё значение в sqrt приходит из int'а. Следи за типизацией, автоматические преобразования типов, могут понаделать гадостей.
|
|
|
Квадратный корень с большого числа - 2006-08-20 22:04:26
|
|
|
c001z3rO
Сообщений: 80
Оценки: 0
Присоединился: 2005-09-21 21:24:47
|
Границей являлось именно 2147483647 Сейчас какой бы тип переменной q не ставил, хоть real, хоть double, хоть extended, пределом являеться 4294967295
rgo, моё значение приходит не откуда, я просто пишу q:=sqrt([тут число, а не переменная]); >>Следи за типизацией, автоматические преобразования типов, могут понаделать гадостей. Поподробнее плиз…
|
|
|
Квадратный корень с большого числа - 2006-08-20 22:48:52
|
|
|
c001z3rO
Сообщений: 80
Оценки: 0
Присоединился: 2005-09-21 21:24:47
|
Поскольку я раньше писал q:=sqrt([тут число, а не переменная]); то у мя нифига не получалось, если в начале взять какую-то переменную и указать её тип real (extended), то потом всё будет ОК. … var q, z: real; z := 9876543210; q:=sqrt(z); writeln(q:5:15); …
А вот как-бы мне теперь q вывести на форму? Label1.Caption:=q не получаеться если делать i:integer; i:=round(q); Label1.Caption:=IntToStr(i); то выводить получаеться округленное, а хотелось-бы увидеть еще 15знаков после точки.
|
|
|
Квадратный корень с большого числа - 2006-08-21 00:15:05
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
я не знаток паскаля, но попробуй написать: sqrt (2147483648.0); в сях это работает.
|
|
|
Квадратный корень с большого числа - 2006-08-21 00:24:13
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
quote:
—————-<BR>Цитата: Дата:20.08.2006 22:04:26, Автор:c001z3rO :: Поподробнее плиз… —————-
в твоём случае парсер читает число как целое четырёхбайтовое со знаком, то есть принимающее значения от -2^31, до 2^31-1. последнее и есть 2147483647. а 4294967295 – это 2^32-1, то есть ты умудрился сказать парсеру, чтобы он читал беззнаковое число. А надо сказать чтобы он читал float. В C, например, для этого достаточно воткнуть куда-нибудь точку. например 5. или 5.0 – это вещественное 5, в то время как просто 5 – это целое 5 со знаком. учи матчасть, это всё должно быть описано.
|
|
|
Квадратный корень с большого числа - 2006-08-21 00:27:37
|
|
|
c001z3rO
Сообщений: 80
Оценки: 0
Присоединился: 2005-09-21 21:24:47
|
rgo, а зачем?! У мя уже всё получилось, читай пост выше! Я уже могу брать любые числа, даже 9999999999 Сейчас проблема в другом: я вывожу терь значени q Label1.Caption := FloatToStr(q); но оно выводит только 10 знаков после точки, а мне нужно видеть 15
|
|
|
Квадратный корень с большого числа - 2006-08-21 00:35:44
|
|
|
freddi
Сообщений: 213
Оценки: 0
Присоединился: 2006-04-17 18:03:00
|
quote:
—————-<BR>Цитата: Дата:21.08.2006 0:27:37, Автор:c001z3rO :: а мне нужно видеть 15 —————-
используй double или extended, я тебе уже говорил об этом.
|
|
|
Квадратный корень с большого числа - 2006-08-21 01:09:40
|
|
|
c001z3rO
Сообщений: 80
Оценки: 0
Присоединился: 2005-09-21 21:24:47
|
Нет. Это решаеться через Label1.Caption := IntToStr(Trunc(q)) + StringReplace(FloatToStrF(Frac(q), ffFixed, 16, 16), '0.', '.', []);
|
|
|
|
|