Trabalhando com Números Complexos

Dart:
Trabalhando com Números Complexos

Como fazer:

O Dart por si só não inclui uma biblioteca interna para números complexos, necessitando ou da implementação de uma classe de número complexo personalizada ou do uso de uma biblioteca de terceiros. Uma escolha popular para tarefas de computação científica, que inclui suporte para números complexos, é o package:scidart.

Implementando uma Classe Básica de Números Complexos

Para operações simples, você pode facilmente definir sua própria classe de número complexo:

class Complex {
  final double real;
  final double imaginary;

  Complex(this.real, this.imaginary);

  // Adição de dois números complexos
  Complex operator +(Complex other) {
    return Complex(real + other.real, imaginary + other.imaginary);
  }

  // Representação em string para fácil depuração
  @override
  String toString() => '${real} + ${imaginary}i';
}

void main() {
  var number1 = Complex(3, 4);
  var number2 = Complex(1, 2);

  var soma = number1 + number2;
  print(soma);  // 4.0 + 6.0i
}

Usando o SciDart para Operações Avançadas

Para operações mais complexas ou quando o desempenho é crítico, o package:scidart oferece suporte abrangente para números complexos, entre outras funcionalidades de computação científica. Primeiro, adicione o SciDart ao seu pubspec.yaml:

dependencies:
  scidart: ^0.0.1-dev.9

Veja como realizar operações básicas com números complexos usando o SciDart:

import 'package:scidart/numdart.dart';

void main() {
  // Criando números complexos
  var complexNum1 = Complex(real: 5, imaginary: 3);
  var complexNum2 = Complex(real: 2, imaginary: 7);

  // Adição
  var soma = complexAdd(complexNum1, complexNum2);
  
  // Multiplicação
  var produto = complexMultiply(complexNum1, complexNum2);

  print('Soma: ${soma.toString()}');  // Soma: Complex(real: 7.0, imaginary: 10.0)
  print('Produto: ${produto.toString()}');  // Produto: Complex(real: -11.0, imaginary: 41.0)
}

Estes exemplos demonstram a manipulação básica e a utilização de números complexos em Dart, tanto através da implementação personalizada quanto via a biblioteca SciDart, destacando a flexibilidade e o poder do Dart para tarefas de computação científica.