Перейти к содержимому

Sqrt c что это

  • автор:

Sqrt c что это

Sqrt (функция)
Навигация

Язык:
Русский
English

Sqrt.png

Возвращает квадратный корень аргумента.

Объявление

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 требует, чтобы результат следующих операций над числами с плавающей точкой:

  • сложение,
  • вычитание,
  • умножение,
  • деление,
  • извлечение квадратного корня

был в точности таким, как если бы вычисления производились по следующему алгоритму:

  1. Найти точный вещественный результат операции;
  2. Округлить точный результат до числа с плавающей точкой в соответствии с требуемым режимом округления.

Стандарт определяет несколько режимов округления точного вещественного результата (в сторону положительной бесконечности, в сторону отрицательной бесконечности, в сторону нуля, а также до ближайшего числа с плавающей точкой), но все эти режимы объединяет одно — если точный вещественный результат представим числом с плавающей точкой точно, то при округлении он не изменится.

Таким образом, если у нас есть две целочисленные величины 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *