- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图通过使用优化和 fixnums 从一个小的二次求解器中获得更高的速度。这是我的代码:
1: (defun solve-x (d)
2: (declare (optimize (speed 3))
3: (type fixnum d))
4: (let ((x 1) (y 1))
5: (declare (type fixnum x y))
6: (loop while (/= (- (* x x) (* d y y)) 1) do
7: (if (> (- (* x x) (* d y y)) 1)
8: (incf y)
9: (incf x)))
10: (list x y)))
forced to do GENERIC-- (cost 10)
unable to do inline fixnum arithmetic (cost 2) because:
The first argument is a (INTEGER 1 21267647932558653957237540927630737409), not a FIXNUM.
The second argument is a (INTEGER
-98079714615416886892398913872502479823289163909206900736
98079714615416886871131265939943825866051622981576163327), not a FIXNUM.
The result is a (VALUES
(INTEGER
-98079714615416886871131265939943825866051622981576163326
98079714615416886913666561805061133780526704836837638145)
&OPTIONAL), not a (VALUES FIXNUM &REST T).
unable to do inline (signed-byte 64) arithmetic (cost 5) because:
The first argument is a (INTEGER 1 21267647932558653957237540927630737409), not a (SIGNED-BYTE
64).
The second argument is a (INTEGER
-98079714615416886892398913872502479823289163909206900736
98079714615416886871131265939943825866051622981576163327), not a (SIGNED-BYTE
64).
The result is a (VALUES
(INTEGER
-98079714615416886871131265939943825866051622981576163326
98079714615416886913666561805061133780526704836837638145)
&OPTIONAL), not a (VALUES (SIGNED-BYTE 64) &REST T).
etc.
最佳答案
如果您确定数字不会在任何时候溢出,您可以添加 (SAFETY 0)
到优化。同时添加 (THE FIXNUM ...)
围绕计算告诉 SBCL 您希望将结果视为固定编号。三论*
应该拆分为两个单独的调用。
您的代码当前正在计算 (- (* x x) (* d y y))
在循环中两次。您应该将其分配给一个变量。还要注意,因为只有 X
或 Y
循环中的变化,没有必要再次计算另一部分(我不知道那些计算是什么,所以我只是把它们称为 FOO
、 BAR
和 QUUX
)。
(defun solve-x (d)
(declare (optimize (speed 3) (safety 0) (debug 0))
(type fixnum d))
(let ((x 1) (y 1))
(declare (type fixnum x y))
(loop with foo of-type fixnum = (* x x)
with bar of-type fixnum = (* (the fixnum (* d y)) y)
for quux of-type fixnum = (- foo bar)
while (/= quux 1)
do (if (> quux 1)
(setf y (1+ y)
bar (* (the fixnum (* d y)) y))
(setf x (1+ x)
foo (* x x))))
(list x y)))
#n=
阅读器宏。
X
和
Y
也可以作为
&AUX
移动到参数列表中摆脱
LET
的变量第二个
DECLARE
.
(defun solve-x (d &aux (x 1) (y 1))
(declare (optimize (speed 3) (safety 0) (debug 0))
(type fixnum d x y))
(loop with foo of-type fixnum = #1=(* x x)
with bar of-type fixnum = #2=(* d (the fixnum (* y y)))
for quux of-type fixnum = (- foo bar)
while (/= quux 1)
do (if (> quux 1)
(setf y (1+ y)
bar #2#)
(setf x (1+ x)
foo #1#)))
(list x y))
X
和
Y
总是加一,你可以通过增加前一个值来避免一些乘法。
(defun solve-x (d &aux (x 1) (y 1))
(declare (optimize (speed 3) (safety 0) (debug 0))
(type fixnum d x y))
(loop with foo of-type fixnum = 1
with bar of-type fixnum = d
for quux of-type fixnum = (- foo bar)
while (/= quux 1)
do (if (> quux 1)
(setf bar (+ bar (the fixnum (* d y)))
y (1+ y)
bar (+ bar (the fixnum (* d y))))
(setf foo (+ foo x)
x (1+ x)
foo (+ foo x))))
(list x y))
关于optimization - SBCL:Fixnum 优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40681075/
我目前正在尝试将包含数字 82,000 的散列 counts["email"] 除以包含值 130 万的变量 total。 当我运行 puts counts["email"]/total 时,我得到
好的,这是怎么回事? irb(main):001:0> 4/3 => 1 irb(main):002:0> 7/8 => 0 irb(main):003:0> 5/2 => 2 我知道 Ruby 在这
使用以下函数,我转到一个站点,抓取一些信息,返回一些 JSON,并将其放入 @price 实例变量中。 返回给我的 JSON 是一个数字,但是如果数字大于 1000,那么数字将包含一个逗号,所以我将其
这个问题在这里已经有了答案: TypeError (String can't be coerced into Fixnum)? (1 个回答) 关闭 8 年前。 我创建了一个程序,它接受输入学生姓名
我在这一行有这个错误(if change_needed - coins[i] >= 0 then ) String can't be coerced into Fixnum 从我的代码来看,我不明白为
我正在查看用 Ruby 1.8 为 RubyQuiz 编写的一些代码,当我在 1.9.2 中运行它时,它现在会抛出一个错误。这个方法 def encrypt(s) return process(s
我想在 Ruby 中获取当前时间的字符串: "Time is " + Time.new.month + "/" + Time.new.day + "/" + Time.new.year 但是它说“无法
当我尝试 fixnum.new 时出现未定义方法错误。 Fixnum.new # undefined method `new' for Fixnum:Class (NoMethodError) 为什
我写了下面的基本代码 puts ' Hi there , what is your favorite number ? ' number = gets.chomp puts number + ' is
我试图通过使用优化和 fixnums 从一个小的二次求解器中获得更高的速度。这是我的代码: 1: (defun solve-x (d) 2: (declare (optimize (speed
为什么数字返回输出的 ruby size 函数是这样的? 1000000.size # => 8 99999999999999999999.size # => 9 最佳答
我正在尝试编写一个从整数中提取最低阶数的函数。例如: > 24689.lowest_order => 9 到目前为止我有: class Integer def lowest_order I
例如,如果我在 irb 中键入以下内容,它会返回 Fixnum。 20.class => Fixnum 此外, 20.between?(10, 30) => true 但是,当我查看 Ruby 文档时
我可以像这样在一个实例上定义一个方法: object = Object.new def object.foo puts "5" end 用 Fixnum 尝试类似的东西是行不通的: def 3.f
我需要通过划分两个单独的计数来计算一些百分比值。我得到的计数值是 class 是 fixnum。但是当我要划分它们时,无论计数值是多少,它都会显示 0, 这里最后的结果显示为 0。 最佳答案 您
我认为 Ruby 会自动转换为 Bignum。我找到了确认 here 然而,这并没有发生: ruby 1.8.7 (358) [universal-darwin12.0] >> 2 ** 62
如何确定负 FixNum 的无符号解释? # unexpected, true (~0b01111011).to_s(2) == ("-" + (~0b01111011).abs.to_s(2)) #
该方法返回任意对象的特征类: class Object def eigenclass class #> 数组: [1, 2].eigenclass # => #> 但是对于 Fixnum
我已经写了一个基本的计算程序。该程序对某些输入运行良好,而对其他输入则给出 TypeError。我无法弄清楚这种不可预测的行为背后的原因。这是我的代码- class Conversion I = 1,
试图解决 Chris Pine 书中的一个问题。要求用户输入他们的名字和姓氏,然后它应该显示两者的字符总数。 这是我提出的众多解决方案之一: puts "First name?" first_name
我是一名优秀的程序员,十分优秀!