jjzjj

math - 戈朗 : arithmetic operators on structs

coder 2024-07-07 原文

有没有办法在结构之间定义算术运算符? 我正在使用小数包来处理固定的小数位并避免四舍五入的 float 错误。 Ir 定义操作调用函数,如 mul、add、sub 等。 我喜欢像使用 float 一样使用该结构:6/2,而不是 decimal.newfromfloat(6).div(newfromfloat(2)) 我希望找到一些接口(interface)来实现,让我大声做那种操作,或者可能是某种 getter setter 来处理底层的值......有什么想法吗?

最佳答案

不,您不能在 Go 中重载运算符。有一个关于它的 FAQ 条目:

Why does Go not support overloading of methods and operators?

Method dispatch is simplified if it doesn't need to do type matching as well. Experience with other languages told us that having a variety of methods with the same name but different signatures was occasionally useful but that it could also be confusing and fragile in practice. Matching only by name and requiring consistency in the types was a major simplifying decision in Go's type system.

Regarding operator overloading, it seems more a convenience than an absolute requirement. Again, things are simpler without it.

https://golang.org/doc/faq#overloading

如果您需要一个可行的解决方案,请查看如何打包 math/big处理算术无运算符重载。

关于math - 戈朗 : arithmetic operators on structs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39590974/

有关math - 戈朗 : arithmetic operators on structs的更多相关文章

  1. ruby - 从源代码 : math. c:37 编译 Ruby 1.8.7 时出错:错误: token "("之前缺少二元运算符 - 2

    这真的很奇怪::josh@josh;wgetftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7.tar.bz2:josh@josh;tarxvjfruby-1.8.7.tar.bz2:josh@josh;cdruby-1.8.7/:josh@josh;CFLAGS='-O0-g-Wall'./configure--disable-pthread:josh@josh;makegcc-O0-g-Wall-DRUBY_EXPORT-D_GNU_SOURCE=1-I.-I.-carray.c[...]gcc-O0-g-Wall-DRUBY_EXPOR

  2. ruby - 如何像 Math 模块那样定义模块方法? - 2

    Math中的方法可以像类方法一样调用:Math.cos(0)但也可以是include-d像实例方法:includeMathcos(0)相比之下,以下模块只能以一种方式调用,而不能以另一种方式调用:moduleFoodefbarendendFoo.bar()#NoMethodErrorforthiscallincludeFoobar()#butthiscallisfine单例方法:moduleFoodefself.barendendFoo.bar()#thiscallisfineincludeFoobar()#butnotthisone知道如何编写像Math这样的模块吗?

  3. ruby - 为什么 Math.sqrt(i*i).floor == i? - 2

    我想知道这是不是真的:当我对一个平方整数求平方根时,就像在f=Math.sqrt(123*123)我将得到一个非常接近123的float。由于浮点表示精度,这可能类似于122.99999999999999999999或123.000000000000000000001。因为floor(122.999999999999999999)是122,我应该得到122而不是123。所以我希望floor(sqrt(i*i))==i-1在大约50%的情况下。奇怪的是,对于我测试过的所有数字,floor(sqrt(i*i)==i。这是一个用于测试前1亿个数字的小ruby​​脚本:100_000_000.

  4. ruby - Ruby 中 Math Power (**) 的反面是什么? - 2

    我想知道如何在Ruby中获得幂的倒数?2**4#=>16然后我想得到它的逆,但我不确定要使用哪个运算符16??2#=>4 最佳答案 指数的倒数是对数。如果ab=c,然后logac=b.您可以在Math中找到对数函数模块,特别是log()对于base-e和log10()以10为基数。要获得以不同为底的对数(例如n),请使用公式logNa=logxa/logxN,其中x是一个值,例如e或10。针对您的特定案例:log216=loge16/loge2=Math.log(16)/Math.log(2)=4你认为这个解释是好的是因为它扩展了你

  5. javascript - MathJax:如何删除 "Typesetting math: 100%"显示消息 - 2

    我正在使用MathJax来呈现一些数学。我如何摆脱左下角的这条消息?我在MathJax的docs中找不到这个. 最佳答案 这是一个状态栏。每MathJax-Docs,您可以在加载mathjax之前通过将消息样式设置为none来关闭它:MathJax.Hub.Config({messageStyle:"none"}); 关于javascript-MathJax:如何删除"Typesettingmath:100%"显示消息,我们在StackOverflow上找到一个类似的问题:

  6. javascript - 为什么在 Math.max 上调用 apply 有效而没有它则无效 - 2

    如果你让我获取数组的最大值,我会这样做:varnums=[66,3,8,213,965,1,453];Math.max.apply(Math,nums);当然,我也可以这样做:nums.sort(function(a,b){returna-b}.pop(nums.length);但我必须诚实。我需要知道为什么有效-使用.apply(Math,nums)。如果我这样做:Math.max(nums);那是行不通的。通过使用apply,我传入Math作为this-以及数组的nums。但我想知道前者有效而后者无效的“为什么”的复杂性。发生了什么魔法?有一些基本的东西我没有全神贯注。我已经阅读了

  7. Javascript - for 循环中的 Math.random - 2

    刚刚在Javascript中尝试在for循环的条件(这就是所谓的?)中生成随机数时遇到了一些有趣的事情。所以,如果我要编写这样的代码:for(vari=0;i它会返回这样的结果:958332684456335345311但是如果我要在第二个for循环之前在变量中生成一个随机数:for(vari=0;i它会返回这样的结果:11131421919171921851518211916151320这里究竟发生了什么?这让我困惑了一会儿。for循环中的Math.random()是否在每次迭代后生成一个新的随机数?循环是否运行代码、迭代和检查条件,并在每次检查条件时生成一个新的随机数?这就是正在发

  8. javascript - 为什么 Math.pow(1, NaN) 在 JavaScript 中等于 NaN? - 2

    在IEEE754-2008节"9.2.1Specialvalues"有提到pow(+1,y)is1foranyy(evenaquietNaN)如果没有阅读整个文档,维基百科给出了shortcut:The2008versionoftheIEEE754standardsaysthatpow(1,qNaN)andpow(qNaN,0)shouldbothreturn1sincetheyreturn1whateverelseisusedinsteadofquietNaN.为什么Math.pow(1,NaN)在JavaScript中是NaN?不符合标准吗? 最佳答案

  9. javascript - 我如何预测 Math.random 结果? - 2

    如果轮盘游戏网站csgopolygon.com正在调用Math.random和Math.floor,我如何预测它的结果? 最佳答案 您认为在理论上可以预测Math.random结果的直觉是正确的。这就是为什么,如果你想构建一个游戏/赌博应用程序,你应该确保使用cryptographicallysecurepseudo-randomnumbergenerator.如果他们正在使用这样的东西,那就别管它了。但是,如果您是正确的,并且他们使用System.time作为Java附带的标准随机数生成器的种子,那么可能有办法。这将涉及生成数百万

  10. javascript - 当 a 为负数且 b 为非整数时,为什么 Math.pow(a, b) 为 NaN? - 2

    这个问题在这里已经有了答案:Math.powwithnegativenumbersandnon-integerpowers(2个答案)关闭8年前。我观察到以下Javascript行为:>Math.pow(4,2)16>Math.pow(4,2.1)18.37917367995256>Math.pow(4,0.5)2>Math.pow(-4,2)16>Math.pow(-4,2.1)NaN>Math.pow(-4,0.5)NaN为什么给一个负数和一个非整数但有理数,使Math.pow返回NaN?例如,为什么Math.pow(4,0.5)不是NaN而是Math.pow(4,-0.5)是Na

随机推荐