Sqrt c что это
Sqrt (функция)
Навигация
Язык:
Русский
English

Возвращает квадратный корень аргумента.
Объявление
Function Sqrt(X : Real) : Real;
Режим
Windows, Real, Protected
Замечания
X — выражение вещественного типа . Результатом будет квадратный корень из X.
См. также
Пример
Язык:
Русский
English
begin
WriteLn ( ‘5 в квадрате равно ‘ , Sqr ( 5 )) ;
WriteLn ( ‘Квадратный корень из 2-х равен ‘ , Sqrt ( 2.0 )) ;
end .
Код для вставки:
::
::
:: ГОСТ :: 
Поделиться:
//

Для форумов:
Для блогов:
Для Википедии:
![]() |
Функция sqrt
В C++, функция sqrt перегружена в и (смотреть sqrt комплексных чисел и sqrt в библиотеке массивов числовых значений).
В Си, определён только один прототип данной функции, с типом данных double .
Параметры:
- val
Вещественное число. Если аргумент отрицательный, возникает ошибка области допустимых значений,которая устанавливает значение макроса ERRNO в EDOM , значение.
Возвращаемое значение
Корень квадратный из val .
Пример: исходный код программы
// пример использования функции sqrt #include // для оператора cout #include // для функции sqrt int main() < double param = 1024.0; std::cout << "sqrt(" << param << ") = " << sqrt(param) // вычисляем корень квадратный
Пример работы программы
CppStudio.com
sqrt(1024) = 32
Дата: 07.09.2012
Поделиться:
Комментарии
rodomod rodomod
buttonPanel.add(buttonDiv); buttonDiv.addActionListener(new ActionListener()< @Override public void actionPerformed(ActionEvent e)< double firstValue=Double.parseDouble(display.getText()); double secondValue=Double.parseDouble(display.getText()); String d=display.getText(); //Math.sqrt(this.real * this.real + this.image * this.image); Math.sqrt(firstValue*firstValue+secondValue*secondValue); if(d.indexOf("")==0)display.setText(Math.sqrt(firstValue*firstValue+secondValue*secondValue)+""); /**else if(d.indexOf("")<0)display.setText((Math.sqrt(firstValue*firstValue+secondValue*secondValue)+"")); else if(d.indexOf("")>0)display.setText((Math.sqrt(firstValue*firstValue+secondValue*secondValue)+"")); else if(d.indexOf("")!=0)display.setText((Math.sqrt(firstValue*firstValue+secondValue*secondValue)+""));*/ > >);
rodomod rodomod
Оставить комментарий
Вы должны войти, чтобы оставить комментарий.
Rust Journey: Хотите освоить язык программирования, который завоевывает мир?
Илон Маск, один из ведущих инноваторов нашего времени, утверждает, что за Rust будущее. А когда последний раз он ошибался в своих прогнозах?
✨ Не упустите свой шанс быть в авангарде IT-революции. Подписывайтесь на канал Rust Journey и начните свой путь в захватывающий мир Rust сегодня!
Можно ли полагаться на sqrt при работе с целыми числами
Java и с++/с нельзя смешивать. Java работает по алгоритму виртуальной машины, которая должна обеспечить одинаковый результат вне зависимости от платформы. с++/с — позволяет создаёт код для процессора, и на одной птатформе может быть один результат, а на другой — другой результат. В общем виде считаю задачу неразрешимой.
16 фев 2021 в 15:47
Думаю, что вот так — можете: i == (int) (sqrt(i * i)+0.5)
16 фев 2021 в 15:48
В С++ sqrt для работы с целыми числами в стандартной библиотеке отсутствует. Если i — int, то выражение i == (int) sqrt(i * i) будет содержать аж 3 неопределенных поведения.
16 фев 2021 в 16:07
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Стандарт арифметики с плавающей точкой IEEE 754-2008 требует, чтобы результат следующих операций над числами с плавающей точкой:
- сложение,
- вычитание,
- умножение,
- деление,
- извлечение квадратного корня
был в точности таким, как если бы вычисления производились по следующему алгоритму:
- Найти точный вещественный результат операции;
- Округлить точный результат до числа с плавающей точкой в соответствии с требуемым режимом округления.
Стандарт определяет несколько режимов округления точного вещественного результата (в сторону положительной бесконечности, в сторону отрицательной бесконечности, в сторону нуля, а также до ближайшего числа с плавающей точкой), но все эти режимы объединяет одно — если точный вещественный результат представим числом с плавающей точкой точно, то при округлении он не изменится.
Таким образом, если у нас есть две целочисленные величины f1 и f2 , представленные типом с плавающей точкой , такие что в вещественных числах выполняется соотношение f1 == sqrt(f2) , то и при вычислениях с плавающей точкой указанное соотношение должно выполняться.
Все целые числа из отрезка [-2**24; 2**24] представимы точно числом с плавающей точкой одинарной точности single-precision floating-point format. В языках C/C++ обычно тип float как раз и предназначен для хранения чисел одинарной точности. В C++ есть функции std::sqrt() и std::sqrtf() (в C только sqrtf ), принимающие/возвращающие значение типа float .
Если f — некоторое целое неотрицательное число типа float такое, что точный вещественный результат произведения f * f принадлежит отрезку [0; 2**24] , то равенство f == std::sqrt(f * f) должно быть истинно.
Если произведение f * f не принадлежит указанному выше отрезку, то оно просто напросто может быть не представимо точно типом float , следовательно извлекать квадратный корень мы будем не из точного квадрата f , а из некоторого приближенного значения. Понятно, что равенство не обязательно будет выполняться.
В языках C/C++ тип double обычно соответствует формату чисел с плавающей точкой двойной точности double-precision floating-point format. И все приведённые выше рассуждения для типа float верны и для double . Только отрезок, все целые числа из которого представимы точно типом double , таков: [-2**53; 2**53] . В C++ есть перегрузка std::sqrt() для работы с типом double , в C для работы с типом double также используется sqrt()
some_integral_type i = . ; i == (some_integral_type) sqrt(i * i);
Если i — неотрицательно, и произведение i * i представимо типом some_integral_type и принадлежит отрезку [0; 2**53] , то приведённое равенство выполняется.
В C функция sqrt принимает аргумент типа double .
В C++ есть перегрузки (или шаблонная версия) функции sqrt для всех целочисленных типов. Внутри она преобразует параметр целочисленного типа к типу double .
Стандарты языков C/C++ не требуют, чтобы типы float и double удовлетворяли стандарту IEEE 754, но обычно удовлетворяют.
На практике я бы посоветовал относиться с осторожностью ко всему написанному выше. У компиляторов есть хитрые опции, которые в целях повышения производительности отключают строгое соответствие стандартам в вопросах арифметики с плавающей точкой. Например, /fp:fast в Visual Studio или -ffast-math в GCC. Если такие опции используются, нужно тщательно изучать документацию — не ломают ли оптимизации квадратные корни каким-нибудь изощрённым и неочевидным способом.
sqrt
Эта функция вычисляет квадратный корень из fi объект с помощью алгоритма двоичного поиска.
c = sqrt( a ) возвращает квадратный корень из fi объект a . Промежуточные количества вычисляются с помощью fimath сопоставленный с a . numerictype объект c определяется, автоматически используя Внутреннее Правило.
c = sqrt( a , T ) возвращает квадратный корень из fi объект a с numerictype объект T . Промежуточные количества вычисляются с помощью fimath сопоставленный с a . См. правила распространения типа данных.
c = sqrt( a , F ) возвращает квадратный корень из fi объект a . Промежуточные количества вычисляются с помощью fimath объект F . numerictype объект c определяется, автоматически используя Внутреннее Правило.
Когда a встроенный double или single тип данных, этот синтаксис эквивалентен c = sqrt(a) и fimath объект F проигнорирован.
c = sqrt( a , T , F ) возвращает квадратный корень fi объект a с numerictype объект T . Промежуточные количества также вычисляются с помощью fimath объект F . См. правила распространения типа данных.
Входные параметры
a — Введите fi массив
скаляр | вектор | матрица | многомерный массив
Введите fi массив в виде скаляра, вектора, матрицы или многомерного массива.
sqrt не поддерживает комплексный, с отрицательным знаком, или [Наклонное Смещение] входные параметры.
Пример: a = fi(pi,1,8,3)
Типы данных: fi
T — numerictype из выхода
numerictype объект
numerictype из выхода c В виде numerictype объект.
Пример: T = numerictype(1,32,30)
F — fimath используемый для вычислений промежуточных количеств
fimath объект
fimath используемый для вычислений промежуточных количеств в виде fimath объект.
Пример: F = fimath(‘OverflowAction’,’Saturate’,’RoundingMethod’,’Convergent’)
Алгоритмы
Внутреннее правило
Для синтаксисов, где numerictype объект выхода не задан как вход к sqrt функция, это автоматически вычисляется согласно следующему внутреннему правилу:
s i g n c = s i g n a
W L c = ceil ( W L a 2 )
F L c = W L c − ceil ( W L a − F L a 2 )
Правила распространения типа данных
Для синтаксисов, для которых вы задаете numerictype объект T , sqrt функция следует правилам распространения типа данных, перечисленным в следующей таблице. В общем случае эти правила могут быть получены в итоге, когда “типы данных с плавающей точкой распространены”. Это позволяет вам писать код, который может использоваться и с фиксированной точкой и с входными параметрами с плавающей точкой.
Тип данных numerictype объект T
ScaledDouble со свойствами numerictype объект T
Любой fi тип данных
Любой fi тип данных
Расширенные возможности
Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.
Указания и ограничения по применению:
- Комплекс и [Наклонное Смещение] вводит ошибку.
- Отрицательные входные параметры приводят к 0 результатам для сгенерированного кода C.
- Отрицательная входная ошибка для MATLAB ® Исполняемый файл (MEX) код.
Генерация HDL-кода
Сгенерируйте Verilog и код VHDL для FPGA и проекты ASIC с помощью HDL Coder™.
Смотрите также
Представленный в R2006b
Документация Fixed-Point Designer
- Примеры
- Функции и другая ссылка
- Информация о релизах
- PDF-документация
Поддержка
- MATLAB Answers
- Помощь в установке
- Отчеты об ошибках
- Требования к продукту
- Загрузка программного обеспечения
© 1994-2021 The MathWorks, Inc.
- Условия использования
- Патенты
- Торговые марки
- Список благодарностей
Для просмотра документации необходимо авторизоваться на сайте
Войти
Памятка переводчика
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.
