Spark的新手,Ada的新手,所以这个问题可能过于宽泛.然而,作为尝试理解Spark的一部分,它是出于善意的要求.除了下面问题的直接答案,我欢迎对风格,工作流程等的批评.
作为我第一次涉足Spark,我选择尝试实现(简单)并证明正确性(迄今为止不成功)的功能 .
问题:实现和证明此功能正确性的正确方法是什么?
我从以下开始util.ads
:
package Util is
function Floor_Log2(X : Positive) return Natural with
Post => 2**Floor_Log2'Result <= X and then X < 2**(Floor_Log2'Result + 1);
end Util;
Run Code Online (Sandbox Code Playgroud)
我没有先决条件,因为输入的范围完全表达了唯一有趣的前提条件.我根据数学定义写的后置条件; 但是,我在这里有一个紧迫的问题.如果X
是Positive'Last
,则2**(Floor_Log2'Result + 1)
超过Positive'Last
和Natural'Last
.我已经在这里反对我对Ada的有限知识了,所以:子问题1:后置条件中子表达式的类型是什么,这是溢出问题吗?有没有一般解决方法?为了避免在这种特殊情况下的问题,我将规范修改为不太直观但等效:
package Util is
function Floor_Log2(X : Positive) return Natural with
Post => 2**Floor_Log2'Result <= X and then X/2 < 2**Floor_Log2'Result;
end Util;
Run Code Online (Sandbox Code Playgroud)
有很多方法可以实现这个功能,我现在并不特别关注性能,所以我对它们中的任何一个都很满意.我认为"自然"实现(鉴于我的特定C背景)如下所示util.adb
:
package body Util is
function Floor_Log2 (X …
Run Code Online (Sandbox Code Playgroud) 是否有任何机制(在SDK或NDK中)获取有关当前显示的供应商信息(或实际上,任何信息)?特别是,我希望找到显示器是OLED还是LCD与其他显示器,因为我测试的每个OLED设备都具有可怕的色彩保真度(过饱和); 由于Android没有色彩校正,因此需要在应用级别进行更正.作为具有手动OLED设备的手动列表并按设备类型进行查找的后备在理论上是可行的,但是(a)那里有很多设备和(b)在设备上工作而不是显示级别增加了额外的复杂性设备使用外部显示器.即使把这个清单放在一起也是一个挑战......
我有一个跨平台的代码库(iOS和Android),它使用标准的渲染到纹理设置.每个帧(初始化后),发生以下序列:
在iOS和一些Android设备(包括模拟器)上,这可以正常工作并且符合预期.在其他设备上(目前位于运行4.0.4的三星Galaxy Note前面),使用纹理的第二阶段渲染看起来"跳跃".其他动画在与"跳跃"位相同的屏幕上继续以60 fps运行; 我的结论是目标纹理的变化在第二个渲染过程中并不总是可见的.
为了测试这个理论,我在上面标有*的步骤中插入一个glFinish().现在,在所有设备上,这都具有正确的行为.有趣的是,glFlush()并没有解决问题.但glFinish()价格昂贵,我还没有看到任何表明这应该是必要的文档.
所以,这是我的问题:在完成渲染到纹理以确保最近绘制的纹理在以后的渲染过程中可用时,我该怎么办?
在我的系统上,wchar_t和int是具有相同属性的不同类型:
#include <type_traits>
sizeof(wchar_t) == sizeof(int) == 4
std::is_signed<wchar_t> == std::is_signed<int> == std::true_type
std::is_same<wchar_t, int> == std::false_type
Run Code Online (Sandbox Code Playgroud)
与此相反,ptrdiff_t
和long int
是相同的类型(相同的属性,并且is_same
是真).
这种明显的wchar_t
保证吗?在所有系统上wchar_t
和int
在所有系统上过载是否安全?是否有任何属性或其他区别wchar_t
和相应的int属性is_same
?
(系统信息:我对一般情况感兴趣,但到目前为止,我的测试是在运行g ++ 4.8.0和Apple clang ++ 4.1的OS X机器上进行的,两者都使用-std = c ++ 11.)