代码之家  ›  专栏  ›  技术社区  ›  Hongwei Xi

如何在ATS中将整数转换为双精度?

ats
  •  0
  • Hongwei Xi  · 技术社区  · 8 年前

    有人能告诉我如何实现以下功能吗 ATS中的功能:

    fun int2double (x: int): double
    

    谢谢

    4 回复  |  直到 8 年前
        1
  •  2
  •   Hongwei Xi    8 年前

    我想你曾经说过以下是更好的方式。。。

    fun int2double(x: int): double = $UN.cast{double}(x)
    
        2
  •  1
  •   Hongwei Xi    8 年前

    这取决于要编译的目标语言。

    如果你编译成C,你可以:

    staload
    UN = "prelude/SATS/unsafe.sats"
    
    fun int2double(x: int): double = $UN.cast(x)
    

    如果编译为JavaScript,则已经定义了int2double。

        3
  •  1
  •   Hongwei Xi    8 年前

    通常,可以简单地使用目标语言中可用的任何东西来实现所需的功能。例如,假设您在C中有以下函数:

    double int2double_in_c(int x) { return (double)x; }
    

    然后,您可以在ATS中声明以下内容:

    fun int2double(x: int): double = "mac#int2double_in_c"
    

    对于ATS中对int2double的每次调用,编译器在生成的代码中生成对int2double_in_c的调用。如果您想编译为JS、Python、PHP等,同样适用。

        4
  •  0
  •   Artyom Shalkhakov    8 年前

    如果您正在编译C代码,则必须使用以下代码:

    fun int2double(x:int): double = g0int2float_int_double (x)
    

    这是一个内置功能(请参阅 $ATSHOME/prelude/SATS/float.sats 详情)。