我正在尝试在Julia中创建表示椭圆曲线上点的复合类型。 如果满足y ^ 2 == x ^ 3 + a * x + b或x和y都等于零,则点有效。 注意,后一种情况表示无穷远处的点。

我想出了以下代码,但无法弄清楚如何计算无穷大点。

  • 有没有办法处理结构中的不同异常?
  • 异常可以简单地返回有效类型而不是错误吗? 例如,如果x ==什么都不是&& y ==什么都不是,那么Point(nothing,nothing,a,b)

IntOrNothing = Union{Int,Nothing} struct Point x::IntOrNothing y::IntOrNothing a::Int b::Int Point(x,y,a,b) = x == nothing || y == nothing || y^2 != x^3 + a*x + b ? error("Point is not on curve") : new(x,y,a,b) end

#1楼 票数:3 已采纳

我将为Point定义两个内部构造函数,如下所示:

IntOrNothing = Union{Int,Nothing}
struct Point
    x::IntOrNothing
    y::IntOrNothing
    a::Int
    b::Int
    Point(x::Nothing,y::Nothing,a,b) = new(x,y,a,b)
    Point(x,y,a,b) = y^2 != x^3 + a*x + b ? error("Point is not on curve") : new(x,y,a,b)
end

因为我认为这最容易理解。

请注意,如果您调用Point(nothing,2,1,3) ,将会得到MethodError Point(nothing,2,1,3)但是我想从您的代码中您并不关心抛出的异常的类型,只要将异常抛出到无效数据上即可。

它能解决您的问题吗?

  ask by roshii translate from so

未解决问题?本站智能推荐:

2回复

如何在Julia中指定函数的类型/签名?

我正在实现牛顿方法来在预编译的库中查找根 。 常见的情况是使用从Float64到Float64函数,我希望它的优化编译版本存在于库中。 当然,我也将实现类型的泛型版本,但是Julia需要通过签名区分方法的某种方式,以便它知道在运行时调用哪个方法。 当前,实现为: 尚未使用/调试。 例
1回复

如何在Julia中指定非理性数字的类型?

这是一个惊喜: 如何在Julia 1.1.1中编写类型Irrational{:e} ? 该表达式在Julia 0.5中返回true,但这仅是因为e是顶级标识符。 从0.5到现在,语言有所改变。 我发现e已移至Base.MathConstants ,但是我还没有弄清楚如何编写其类型。
1回复

julia抛出:“new{…}”中指定的类型参数太少

我想创建一个类似于下面的struct C ,但其中Ca和Cb的类型相同: 我认为通过执行以下操作来实现这将是微不足道的: 但它抛出一个错误: 我在julia discourse上找到了解决方案的开始。 错误消失了。 但由于某种原因它不适用于所有Int 有人知道这里发生了什么吗?
2回复

如何在julia中指定数组的第i个轴

如何使用for循环简化代码? eta和T是 6 阶张量数组, size(eta) == size(T) 。
1回复

如何在Julia中为自己的复合类型定义“:”范围运算符?

我有以下类型定义: 并希望允许以下操作:如果我们有T :: TransitionMatrix,我希望可以使用范围功能(即IE,P [:,1],P [:,3]等) TA我该怎么做? 我做了类似的事情来定义过渡矩阵的“大小”,如下所示,但我不知道如何让冒号运算符发挥作用。 谢谢!
1回复

保存复合类型Julia的数组

对于我正在运行的实验,定义自己的类型很方便。 问题是计算量确实很大,因此我需要在服务器上运行它,然后访问数据以绘制结果。 因此,第一种类型具有我定义的某些字段,然后其他类型没有固定数量的字段。 基本上我有这种交织的类型: 因为TestType1从不改变,但在TestType2内,我想
1回复

Julia:为什么在函数中指定参数类型会导致(看似)不一致的行为?

我有一个函数,它接受 7 个(关键字)参数,每个参数都指定了其类型,最后一个具有默认值,如下所示: truefalse*参数可以是二truefalse*数组 (BitArray{2}) 或它的视图(例如view(somearray, 2:4, 3:5) )。 somevar*参数可以是 Floa
2回复

遍历Julia中复合类型的字段

遍历Julia中复合(用户定义)类型的字段的最佳方法是什么? 假设我定义了以下类型并创建了一个实例: 我如何遍历所有字段,例如将字段及其值打印到REPL? 我有一个带有多个字段的类型,我不想显式地命名每个字段。 谢谢