div_ function
Tensor
div_(
- dynamic a,
- dynamic b, {
- String rounding_mode = "",
})
Implementation
Tensor div_(dynamic a, dynamic b, {String rounding_mode = ""}) {
if (a is num) {
return div_(b, a);
} else if (a is Tensor) {
if (b is Tensor) {
final units = utf8.encode(rounding_mode);
// 在本地分配足够的内存来复制这个 Uint8List
final Pointer<Uint8> result =
malloc.allocate<Uint8>(units.length + 1); // 注意加 1,为了 null 结尾
// 获取 Uint8List 的指针
final Uint8List nativeString = result.asTypedList(units.length + 1);
// 将 Uint8List 复制到分配的内存中
nativeString.setRange(0, units.length, units);
// 确保以 null 字节结尾,满足 C 语言对字符串的要求
nativeString[units.length] = 0;
// 返回指向已编码字符串的指针
final rounding_mode_Utf8 =
rounding_mode.isEmpty ? nullptr : result.cast<Utf8>();
Tensor_div_(a._tensorPtr, b._tensorPtr, rounding_mode_Utf8);
final errorMsg = _get_and_reset_last_err();
if (errorMsg != nullptr) {
final errorString = errorMsg.cast<Utf8>().toDartString();
throw Exception(errorString);
}
final tensor = Tensor._internal(a._tensorPtr);
return tensor;
} else if (b is num) {
if (b is int) {
final rightScalar = int32_to_scalar(b);
final units = utf8.encode(rounding_mode);
// 在本地分配足够的内存来复制这个 Uint8List
final Pointer<Uint8> result =
malloc.allocate<Uint8>(units.length + 1); // 注意加 1,为了 null 结尾
// 获取 Uint8List 的指针
final Uint8List nativeString = result.asTypedList(units.length + 1);
// 将 Uint8List 复制到分配的内存中
nativeString.setRange(0, units.length, units);
// 确保以 null 字节结尾,满足 C 语言对字符串的要求
nativeString[units.length] = 0;
// 返回指向已编码字符串的指针
final rounding_mode_Utf8 =
rounding_mode.isEmpty ? nullptr : result.cast<Utf8>();
Tensor_div_scalar_(
a._tensorPtr, rightScalar.scalarPtr, rounding_mode_Utf8);
final errorMsg = _get_and_reset_last_err();
if (errorMsg != nullptr) {
final errorString = errorMsg.cast<Utf8>().toDartString();
throw Exception(errorString);
}
final tensor = Tensor._internal(a._tensorPtr);
return tensor;
} else if (b is double) {
final rightScalar = float64_to_scalar(b);
final units = utf8.encode(rounding_mode);
// 在本地分配足够的内存来复制这个 Uint8List
final Pointer<Uint8> result =
malloc.allocate<Uint8>(units.length + 1); // 注意加 1,为了 null 结尾
// 获取 Uint8List 的指针
final Uint8List nativeString = result.asTypedList(units.length + 1);
// 将 Uint8List 复制到分配的内存中
nativeString.setRange(0, units.length, units);
// 确保以 null 字节结尾,满足 C 语言对字符串的要求
nativeString[units.length] = 0;
// 返回指向已编码字符串的指针
final rounding_mode_Utf8 =
rounding_mode.isEmpty ? nullptr : result.cast<Utf8>();
Tensor_div_scalar_(
a._tensorPtr, rightScalar.scalarPtr, rounding_mode_Utf8);
final errorMsg = _get_and_reset_last_err();
if (errorMsg != nullptr) {
final errorString = errorMsg.cast<Utf8>().toDartString();
throw Exception(errorString);
}
final tensor = Tensor._internal(a._tensorPtr);
return tensor;
} else {
throw Exception("wrong data type");
}
} else {
throw Exception("wrong data type.");
}
} else {
throw Exception("wrong data type.");
}
}